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

标签 java hibernate jpa hibernate-mapping

环境:

  • 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/

相关文章:

java - JAR list 类路径,使用文件夹而不是 jar

java - 如何使用 Spring 3.2.3 JavaConfig 读取环境变量?

java - JPA:当 child 有嵌入式ID时如何级联保存实体?

java - Hibernate Criteria 中最多有两个日期列

java - EntityManager 无法在独立应用程序中初始化

java - java JDBC +mysql数据库更新查询

javascript - 我需要一个javascript来打开url 30秒,然后打开jsp文件

java - 找不到类型的匹配 bean ... 依赖项

java - 一对一映射期间的 Hibernate PropertyAccessException

java - JPA 和 DTO,创建 DTO 的最佳方式?