Stu*_*rog 8 java hibernate jpa hibernate-mapping
环境:
我决定重新解释这些问题.
有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;
}
Run Code Online (Sandbox Code Playgroud)
注意:两个表id都是顺序的,没有相关性.除了table.address.company_id是公司的外键.
怎么做映射?我预期的结果是:
"company":{
"id":4,
"name":"company name",
"address":{
"id":3,
"address":"anywhere",
"company_id":4
}
}
Run Code Online (Sandbox Code Playgroud)
所以有人可以教我,如何映射这2个表?
你想要的是Company和之间的一对一映射Address
只需@OneToOne在Company类的table_address字段中添加注释:
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
}
Run Code Online (Sandbox Code Playgroud)
除了问题:尊重java命名约定,在你的情况下,类名应该以大写字母开头,也应该以变量名中的下一个字开头.即公司应该是公司和地址应该是地址,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
}
Run Code Online (Sandbox Code Playgroud)
来自stupidfrog:如果你使用@PrimaryKeyJoinColumn,则id加入错误.id连接主要但不是地址表company_id
这里是来自hibernate的参考 http://docs.jboss.org/hibernate/jpa/2.1/api/javax/persistence/OneToOne.html 示例1
| 归档时间: |
|
| 查看次数: |
6559 次 |
| 最近记录: |