2017-01-29 13 views
1

私は複合主キーを持つレコードを挿入しようとしているが、新しいレコードを保存する時に、私はこのメッセージを得る:れるJava PersistenceコンポジットID

E =(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] setter of 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を@Columnアノテーションにinsertable = falseがありますか?あなたはそれをどうしようとしていますか? –

答えて

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;ネストされた例外はjava.lang.IllegalStateExceptionです:java.lang.String型の値を必要な型に変換できませんcom.example.persistence.ProdutoId for property produtoId:一致するエディタまたは変換戦略が見つかりません –

+0

ここでコードを共有できますか? –

+0

ありがとうAnil、あなたの例を使って問題を解決しました –

関連する問題