Java JPA,Hibernate:仅使用外键的OneTONE映射
环境:Java JPA,Hibernate:仅使用外键的OneTONE映射,java,hibernate,jpa,hibernate-mapping,Java,Hibernate,Jpa,Hibernate Mapping,环境: Hibernate 4.1.6.1最终版本 弹簧3.1.2.释放 Spring JPA 1.1.0.0发布版 PostgreSQL 9.1-901-1.jdbc4 我决定重新措辞这些问题 共有两个表格: public company { private Long id; private Long name; private address table_address; } public address { private Long id; private Stri
- Hibernate 4.1.6.1最终版本
- 弹簧3.1.2.释放
- Spring JPA 1.1.0.0发布版
- PostgreSQL 9.1-901-1.jdbc4
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都是连续的,没有关联。除了表。地址。公司id
是公司的外键
如何进行映射?我期望的结果是:
"company":{
"id":4,
"name":"company name",
"address":{
"id":3,
"address":"anywhere",
"company_id":4
}
}
有人能教我如何映射这个2表吗?您应该创建两个实体类,如下所示 公司实体
@Entity
@Table(name = "YOUR TABLE NAME")
public company{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "COMPANY_ID")
private Long id;
@Column(name = "NAME")
private Long name;
@JoinColumn(name = "ADDRESS_ID")
@OneToOne(optional = false)
private address table_address;
}
地址实体
@Entity
@Table(name = "YOUR TABLE NAME")
public address{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
private Long id;
@Column(name = "ADDRESS")
private String address;
@JoinColumn(name = "COMPANY_ID")
@OneToOne(optional = false)
private Long company_id;
}
希望这对您有所帮助您需要的是
公司
和地址
只需将@OneToOne
注释添加到公司类的table_地址字段:
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命名约定,在您的例子中,类名应该以大写字母开头,变量名中的下一个单词也应该以大写字母开头。i、 e.公司应为公司,地址应为地址,私人地址表\u地址代码>更改为私人地址公司地址代码>
更新的解决方案
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连接错误。id与两个主要但不是地址表company\u id连接
这是来自hibernate的参考
示例1您好,在您的公司实体@JoinColumn(name=“ADDRESS\u ID”)中,ADDRESS\u ID来自何处?ADDRESS\u ID是您的地址表的列名,它映射到上面地址类中的ID。如果您遇到错误/异常,请提供错误/异常。在ADDRESS表中,公司ID字段名可以是任意,这些表是如何连接的?@Stupidfrog您提到的table.address.company\u id是公司的外键。所以address
的company\u id的数据类型和company
类的id应该是相同的。ya,它是外键,但在表实体中,没有任何注释来声明company\u id是company.id外键。但是,即使使用提供的方法u,也会提示此错误:列company.address_id不存在。我刚刚找到了解决方案,它与我们的解决方案接近90%。唯一不同的是@PrimaryKeyJoinColumn开关切换到@JoinColumn(name=“company\u id”),用于您的解决方案。我将稍后测试并更新also@AbhishekNayak如果我使用您更新的解决方案进行一对一映射。外键company\u id
未插入Address
表中。你能帮忙吗。