环境:
- hibernate 4.1.6.final
- Spring 3.1.2.发布
- Spring JPA 1.1.0.release
- PostgreSQL 9.1-901-1.jdbc4
我决定改写问题。
有2张表:
public company
{
private Long id;
private Long name;
private address table_address;
}
public address
{
private Long id;
private String address;
private Long company_id;
}
注意:两个表id是连续的,没有关联。除了table.address.company_id
是公司的外键。
如何做图?我期望的结果是:
"company":{
"id":4,
"name":"company name",
"address":{
"id":3,
"address":"anywhere",
"company_id":4
}
}
那么有人可以教我如何映射这 2 个表吗?
最佳答案
你想要的是 Company
和 Address
之间的一对一映射
只需在 Company 类的 table_address 字段添加 @OneToOne
注解即可:
public class Address {
@Id
@GeneratedValue
private Long id;
private String address;
@OneToOne
@PrimaryKeyJoinColumn
private Company company;
//getters and setters
}
public class Company {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToOne(mappedBy = "company",cascade = CascadeType.ALL)
private Address companyAddress;
//getters and setters
}
<子>
除了问题:
尊重 java 命名约定,在您的情况下,类名也应以大写字母开头,变量名中的下一个单词也应如此。即company应该是Company,address应该是Address,private address table_address;
更改为 private Address companyAddress;
更新的解决方案
public class Address {
@Id
@GeneratedValue
private Long id;
private String address;
@OneToOne
@JoinColumn(name = "company_id")
private Company company;
//getters and setters
}
public class Company {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToOne(mappedBy = "company",cascade = CascadeType.ALL)
private Address companyAddress;
//getters and setters
}
来自 stupidfrog:如果你使用 @PrimaryKeyJoinColumn,那么 id join 是错误的。 id 与主要但不是地址表 company_id 连接
这里是hibernate的引用 http://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/OneToOne.html 示例 1
关于java - JPA, hibernate : OneToOne mapping with foreign key only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25376101/