给定的模式不是真实的;这是一个例子。这项工作对于将POJO映射到无法更改的传统数据库模式很有用。针对引用复合键列的列的休眠JPA映射,但没有外键关联
两个表,人与车:
- 人有Person.lastName的firstName和lastName
- 汽车引用在OneToOne自己的
- 人与汽车是一个复合键,可空列在数据库模式中不相关;没有外键
数据库表
------------------------- ------------------------- | Person | | Car | |-------------------------| |------------------------- | <PK> first_name: String | | owner_last_name: String | | <PK> last_name: String | ------------------------- -------------------------
Java类
class Person {
@Id
@Column(name="first_name")
String firstName;
@Id
@Column(name="last_name")
String lastName;
}
class Car {
@JoinColumn(name="owner_last_name", referencedColumnName="last_name")
@OneToOne(optional = true)
Person owner;
}
在给定的例子JPA注释,Hibernate的错误是:
org.hibernate.AnnotationException: referencedColumnNames(last_name) of com.example.Car.owner referencing com.example.Person not mapped to a single property
我想在检索Car对象时拥有正确的Person对象。同样,模式不能改变。
阿希什,我最初使用这个模式,但决定,因为我的@Id例如工作相同,除去额外的层和更清晰阅读并理解。 – Matt