鉴于我们已经
表Person(id,address_id)和Address (id,town)
和POJO
class Person {
int id; int addressId;
}
班级地址{
int id;
弦镇;}
是否可以将地址映射到某人? (休眠)
*查询一个人只会得到它的id和它的地址id
是否也可以通过他/她的城镇搜索一个人?
更新
我想补充一点:Person类仅限于int addressId;
使用
一个原因是我们希望Person类是原子的(所有数据都是独立的)并将其用于Web服务等
提前致谢
答案 0 :(得分:4)
将字段private int addressId;
替换为人员中的private Address address;
字段,并在字段中添加@OneToOne
注释。
@Entity
class Person {
@Id
int id;
@OneToOne
Address address;
}
@Entity
class Address{
@Id
int id;
String town;
}
如果Address不是自己的表,那么在@Embeddable Annotation上有一个战利品。 (Hibernate Annotation Reference的Chapter 2.2.2.2. Access type中的示例)
更新
我想补充一点:Person类仅限于使用int addressId;
您需要更复杂的HQL查询:请参阅Hibernate Reference Documentation
SELECT p FROM Person as p
WHERE p.addressId in (
SELECT a.id FROM Address AS a WHERE a.town = 'Dresden'
)
答案 1 :(得分:0)
首先... int在这里不是一个非常好的选择,因为id可以为null(只要它们不被持久化并获得它们的值@GeneratedValue并且存储addressId很麻烦......
怎么样?class Person {
Integer id;
Address address;
}
然后你可以查询“SELECT p.id,p.address.id FROM Person p”和“SELECT p FROM Person p WHERE p.address.town =:town”......