2017-01-29 10 views
1

Я пытаюсь вставить запись с составным первичным ключом, но в момент сохранения новой записи я получаю сообщение:Java Persistence Composite ID

е = (org.springframework.orm.jpa .JpaSystemException) org.springframework.orm.jpa.JpaSystemException: не удалось установить полю значение [POST_INSERT_INDICATOR] значение путем отражения ...

@Getter 
@Setter 
@Entity 
@EqualsAndHashCode 
@Table(name = "produto") 
@IdClass(ProdutoId.class) 
public class Produto implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id_produto") 
    private Long idProduto; 

    @Id 
    @Column(name = "oficina", insertable = false, updatable = false) 
    private Long idOficina; 

    @ManyToOne 
    @JoinColumn(name = "oficina") 
    private Oficina oficina; 

} 



@AllArgsConstructor 
@NoArgsConstructor 
@EqualsAndHashCode 
@Data 
public class ProdutoId implements Serializable { 

    public Long idProduto; 
    public Long idOficina; 

} 


@Repository 
public interface ProdutoRepository extends JpaRepository<Produto, ProdutoId> {} 

кто-нибудь когда-нибудь видел ошибку, как это?

+0

могли бы вы предоставить полную трассировку стека? – Andrew

+0

Да: e = (org.springframework.orm.jpa.JpaSystemException) org.springframework.orm.jpa.JpaSystemException: Не удалось установить значение значения поля [POST_INSERT_INDICATOR] путем отражения: [класс com.example.persistence.ProdutoId. idProduto] сеттер com.example.persistence.ProdutoId.idProduto; Вложенное исключение - org.hibernate.PropertyAccessException: Не удалось установить значение поля [POST_INSERT_INDICATOR] путем отражения: [класс com.example.persistence.ProdutoId.idProduto] setter of com.example.persistence.ProdutoId.idProduto –

+0

Почему вы отметили idOficina as insertable = false в аннотации @Column? Вы уверены, что вы пытаетесь с этим сделать? –

ответ

0

Для создания составного первичного ключа вы можете передать этот пример,

@Entity 
@Table(name="testuserrole") 
public class UserRole{ 
    @EmbeddedId 
    private UserRoleId id = new UserRoleId(); 

    public UserRoleId getId() { 
     return id; 
    } 

    public void setId(UserRoleId id) { 
     this.id = id; 
    } 

    @Transient 
    public long getUserId() { 
     return id.userId; 
    } 

    public void setUserId(long userId) { 
     id.userId=userId; 
    } 

    @Transient 
    public long getRoleId() { 
     return id.roleId; 
    } 

    public void setRoleId(long roleId) { 
     id.roleId=roleId; 
    } 

} 

@Embeddable 
class UserRoleId implements Serializable { 

    @Column(name = "user_id") 
    public long userId; 

    @Column(name = "role_id") 
    public long roleId; 

} 
+0

С этим кодом я получаю этот возврат: Не удалось преобразовать значение свойства типа java.lang.String в требуемый тип com.example.persistence.ProdutoId для собственность produtoId; nested exception is java.lang.IllegalStateException: Невозможно преобразовать значение типа java.lang.String в требуемый тип com.example.persistence.ProdutoId для свойства produtoId: не найдено подходящих редакторов или стратегия конверсии –

+0

Можете ли вы поделиться своим кодом здесь –

+0

Спасибо Анил, я решил проблему, используя ваш пример –