![](/img/trans.png)
[英]JPA / Hibernate unidirectional one-to-one mapping with shared primary key
[英]how to properly set up hibernate unidirectional one-to-one mapping
我有两个表在列上具有one-to-one
映射。 我想使用注释设置unidirectional one-to-one
休眠映射,因为我希望能够从联接表中获取结果,但不想对子表进行外部约束检查。
这是我的快速代码。
@Entity
@Table(name = "student")
public class student {
// primary key and other column definition here..
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name="address_id")
private Address address;
// getters and //setters
}
@Entity
@Tale(name = "address")
public class address {
@Id
@GeneratedValue(generator = "hibernate-uuid")
@GenericGenerator(name = "hibernate-uuid", strategy = uuid")
@Column(name = "id", unique = true, length = 36, nullable = false)
private String id;
@Column(name="address_id")
private String address_id;
// getters and setters
}
当我尝试插入学生时(但不是地址),以上给出了以下异常。
Caused by: org.hibernate.AnnotationException: A Foreign key refering com.test.Student from com.test.Address has the wrong number of column. should be 2
我在这里做错了什么?
首先,在student
课堂中将层叠类型更改为REFRESH(最好将其删除)。 然后,如果它是单向的,则意味着另一部分将一无所知。 因此,您应该将referenceColumnName
添加到您的@OneToOne
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PK_OF_THE_OTHER_TABLE", referencedColumnName = "CURRENT_TABLE_COLUMN_REFERENCE",
nullable = false, insertable = false, updatable = false)
@JoinColumn(name = "PK_OF_THE_OTHER_TABLE", referencedColumnName = "CURRENT_TABLE_COLUMN_REFERENCE",
nullable = false, insertable = false, updatable = false)
@JoinColumn(name = "PK_OF_THE_OTHER_TABLE", referencedColumnName = "CURRENT_TABLE_COLUMN_REFERENCE",
nullable = false, insertable = false, updatable = false)
@JoinColumn(name = "PK_OF_THE_OTHER_TABLE", referencedColumnName = "CURRENT_TABLE_COLUMN_REFERENCE",
nullable = false, insertable = false, updatable = false)
通过此实现,您将不需要更新其他部分,而是可以加入并获取所需的信息。
更新 PK_OF_THE_OTHER_TABLE
是address
表的主键。 CURRENT_TABLE_COLUMN_REFERENCE
也是您的外键(当前表的字段指向address
表)-我假设您将一对一关系放在Student
实体中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.