gpt4 book ai didi

java - JPA, hibernate : OneToOne mapping with foreign key only

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:30 24 4
gpt4 key购买 nike

环境:

  • 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 个表吗?

最佳答案

你想要的是 CompanyAddress 之间的一对一映射

只需在 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应该是Companyaddress应该是Addressprivate 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com