【问题标题】:Hibernate - Three Entities in One TableHibernate - 一张表中的三个实体
【发布时间】:2015-08-13 22:59:56
【问题描述】:

我在实体类中设置一些休眠注释时遇到问题。

我的问题是:我如何告诉 Hibernate,它应该将地址、名称和客户信息存储在一张表中。此表应具有以下列:ID、Given、Surname、Street、HouseNumber、Zip、City、Phone、Comment。目前 Hibernate 在 mysql 数据库中为每个实体生成一个表。因此有必要在每个实体类(客户、名称、地址)中定义一个@Id。但我想将所有信息保存在一张表中,客户只有一个 @Id。

我该如何解决这个问题?

您可以在下面找到 Customer、Name 和 Address 实体类的摘录:

@Entity
@Table(name = "customer")
@XmlRootElement
public class Customer {
    @Id
    @GeneratedValue
    private int id;
    @OneToOne
    private Name name;
    @OneToOne
    private Address address;
    private String phone;
    private String comment;
    public Customer() { }
}

@Entity
@XmlRootElement
public class Name {
    private String given;
    private String surname;
    public Name() { }
}

@Entity
@XmlRootElement
public class Address {
    private String street;
    private String houseNumber;
    private String zip;
    private String city;
    public Address() { }
}

【问题讨论】:

    标签: java mysql hibernate jpa one-to-one


    【解决方案1】:

    只有Customer 应该用@Entity 注释。其他类不是实体,而只是客户实体的一小部分。因此,它们应该使用@Embeddable 进行注释。

    @Entity
    @Table(name = "customer")
    public class Customer {
        @Id
        @GeneratedValue
        private int id;
        @Embedded
        private Name name;
        @Embedded
        private Address address;
        private String phone;
        private String comment;
        public Customer() { }
    }
    
    @Entity
    public class Name {
        private String given;
        private String surname;
        public Name() { }
    }
    
    @Embeddable
    public class Address {
        private String street;
        private String houseNumber;
        private String zip;
        private String city;
        public Address() { };
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-06
      • 2016-07-04
      • 2012-08-22
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      相关资源
      最近更新 更多