JPA,Hibernate:仅使用外键的OneToOne映射

Stu*_*rog 8 java hibernate jpa hibernate-mapping

环境:

  • Hibernate 4.1.6.final
  • Spring 3.1.2.release
  • 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;
}
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个表?

Abh*_*yak 6

你想要的是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