【问题标题】:mapping multiple collection with one entity用一个实体映射多个集合
【发布时间】:2018-09-22 20:16:01
【问题描述】:

我有一个四实体类,如下所示。 映射要求就像- 1-客户可能有多个地址 2-客户可能有多个唯一的联系电话。 3-客户可能有多个唯一的电子邮件 ID。 在运行应用程序时,我得到了 MultipleBagFetchException 因为多集合或者可能是错误映射的问题。任何人都可以帮助我... 谢谢

第一

public class Customer{
@Id
@GeneratedValue(generator = "uuid")
@Access(AccessType.PROPERTY)
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Type(type = "uuid-char")
@Column(columnDefinition = "VARCHAR(36)", name = DatabaseConstants.ID)
private UUID id;

private String firstName;
private String middleName;
private String lastName;

private Date dob;
@OneToOne(cascade = CascadeType.ALL)
private Gender gender;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "customer")
@JoinColumn(name="department_id")
@Embedded
private List<Address> address;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "customer")
@Embedded
private Set<Email> email;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "customer")
@Embedded
private Set<Mobile> mobile;
}

第二-

public class Address {
@Id
@GeneratedValue(generator = "uuid")
@Access(AccessType.PROPERTY)
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Type(type = "uuid-char")
@Column(columnDefinition = "VARCHAR(36)", name = DatabaseConstants.ID)
private UUID id;
private String country;
private String state;
private String city;
private String streetAddress;
private String zip;
private String addressType;
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
private Customer customer;
}

第三-

public class Email {
@Id
@GeneratedValue(generator = "uuid")
@Access(AccessType.PROPERTY)
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Type(type = "uuid-char")
@Column(columnDefinition = "VARCHAR(36)", name = DatabaseConstants.ID)
private UUID id;
@javax.validation.constraints.Email
private String emailId;
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
private Customer customer;
private boolean primary;
}

第四-

public class Mobile {
@Id
@GeneratedValue(generator = "uuid")
@Access(AccessType.PROPERTY)
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Type(type = "uuid-char")
@Column(columnDefinition = "VARCHAR(36)", name = DatabaseConstants.ID)
private UUID id;

private String mobileNumber;
private boolean primary;
@ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
private Customer customer;
}

【问题讨论】:

    标签: java hibernate annotations mapping


    【解决方案1】:

    这些你不需要@Embedded 属性

    private List<Address> address;
    private Set<Email> email;
    private Set<Mobile> mobile;
    

    @Embedded 仅在您想要嵌入复合值时才需要。在这里,您有一个简单的实体之间的一对多关系。删除类成员上的@Embedded 和子类上的@Embeddable(如果它们存在),如果不存在则放置@Entity。

    【讨论】:

      猜你喜欢
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多