我有2个实体类:Student是父类,Address是子类,具有一对一映射:
student_id int(pk),roll_no int(pk),name varchar
student_id(pk,fk),国家/地区varchar
address实体中的student_id既是主键也是外键
学生实体类:
@Entity
@Table(name = "student")
public class Student {
@EmbeddedId
private StudentPrimaryKey studentPrimaryKey;
@Column(name = "name")
private String name;
@OneToOne(mappedBy = "student", cascade = CascadeType.ALL)
private Address address;
........
@Embeddable
public class StudentPrimaryKey implements Serializable{
@Column(name = "student_id")
private long id;
@Column(name = "roll_no")
private long rollNo;
....
@Entity
@Table(name = "address")
public class Address {
@Id
@Column(name = "student_id")
private long id;
@Column(name = "country")
private String country;
@OneToOne
@JoinColumn(name = "student_id")
@MapsId
private Student student;
.......
异常为-org.hibernate.AnnotationException:@mapsid映射中的隐式列引用失败,请尝试使用显式referenceColumnNames
我知道父表中有两个主键列,@mapsid无法确定应该将外键映射到父表中的哪一个,所以我尝试在Address Entity中使用referencedColumnName-
@OneToOne
@JoinColumn(name = "student_id", referencedColumnName = "student_id")
@MapsId
private Student student;
新异常:在@mapsid映射中找不到列引用:roll_no
这是一个存在相同问题的链接,即JPA/hibernate不允许部分复合主键作为外键。
请提供您的支持,帮助我处理这件事。
如果student
只能通过其ID
和rollno
的组合来唯一标识,则相应的address
也需要其主键/外键中的这两个字段,并且应该如下所示(注意,它使用相同的@embeddedid
、studentprimarykey
):
@Entity
@Table(name = "address")
public class Address {
@EmbeddedId
private StudentPrimaryKey primaryKey;
@MapsId
@JoinColumns({
@JoinColumn(name="student_id", referencedColumnName="student_id"),
@JoinColumn(name="roll_no", referencedColumnName="roll_no") })
@OneToOne
Student student;
@Column(name = "country")
private String country;
...
您还需要将roll_no
列添加到address
表中。
如果student
可以通过其ID
唯一标识(正如您的address
映射所暗示的),则可以从主键中删除rollno
并在ID
上使用简单的@id
映射和在rollno
上使用@basic
映射。
我的数据库是: 我们可以在Table2中为Table1中的1设置多行。 我的TABLE1实体是: 我的Table1Id类是: 我的TABLE2实体是: 我的Table2Id类是: 当我尝试启动我的tomcat时,我有以下错误: 我尝试使用引用列,主键连接列和许多其他东西,但是通过在互联网上阅读它,它可以解决数据库建模问题。我认为问题是主键和外键在2个表中具有相同的名称,但我可能是错的......我
我有以下表格,如何将它们映射到JPA实体: 事件表与会议表具有一对多的关系。我如何在JPA中映射这种双向关系?
我有一个这样的实体: 多谢了,安德里亚
在我的jpa映射中,我试图将带有一个主键的父类映射到带有复合键的子类,但似乎插入了错误的表,它已经生成了2个表,但不幸的是我没有绑定外键(policy_value_summary_id) 我试图用策略值(子类)保存策略摘要值(父),如下所示 下面是输出给我的错误
问题内容: 我试图弄清楚如何构建JPA实体bean,以使数据适用于我的设备。该数据库是旧的,一成不变的,所以我不能更改架构。设备模型具有复合主键,其中的一列是设备类型的FK。 我尝试了几种不同的方法。首先是设备具有DeviceModel和DeviceType,但是这给了我一个错误,那就是太多的东西在引用dev_type。因此,然后我尝试让DeviceModel引用DeviceType,但遇到了相同
问题内容: 我必须使用hibernate模式,并且不太确定如何解决此问题,我有2个具有1..n关系的表,如下所示: 我该如何使用Hibernate进行管理??? 我不知道如何管理第二张表的主键… 问题答案: 在Hibernate参考文档中有一个与您的案例完全相似的示例。在此示例之前,您将找到解释。这是与您的问题匹配的示例(用户是表A,客户是表B): 注意:如果您拥有这两个表的代理标识符,则要简单得