Java 当组合键的一个元素是实体时,如何在JPA中声明组合键?
有一张桌子Java 当组合键的一个元素是实体时,如何在JPA中声明组合键?,java,hibernate,jpa,composite-primary-key,Java,Hibernate,Jpa,Composite Primary Key,有一张桌子 master id int primary key 及 与JPA实体的合作 @Entity @Table(name = "master") class Master { @Id private int id; } @Entity @Table(name = "detail") @IdClass(DetailId.class) class Detail { @ManyToOne @JoinColumn(name = "master_id") @Id Ma
master
id int primary key
及
与JPA实体的合作
@Entity
@Table(name = "master")
class Master {
@Id
private int id;
}
@Entity
@Table(name = "detail")
@IdClass(DetailId.class)
class Detail {
@ManyToOne
@JoinColumn(name = "master_id")
@Id
Master master;
@Id
String name;
}
和一个身份类
class DetailId {
Master master;
String name;
}
在运行时,Hibernate抱怨无法将int
设置为初始化Detail
类的Master
字段
有什么想法吗?在
DetailId
中,您不能使用实体:您需要将Master
更改为int-Master
。您需要实现Serializable
class DetailId implements Serializable {
int master;
String name;
}
我认为您不需要使用
@Id
,而是需要使用其他东西。我认为它是@EmbeddedId
参见@Id
等文档,在这种情况下完全可用DetailId
没有用@Entity
注释,但是谢谢anyway@BorisPavlović我的意思是您需要将Master-Master
更改为int-Master
class DetailId implements Serializable {
int master;
String name;
}