Hibernate 休眠一对多和多对多使用。如何引用现有值而不是插入已发布的
如何强制Hibernate不将重复值插入感兴趣的表中,而只是引用现有值 以下是一个例子: 性别实体:Hibernate 休眠一对多和多对多使用。如何引用现有值而不是插入已发布的,hibernate,duplicates,entity,one-to-many,many-to-one,Hibernate,Duplicates,Entity,One To Many,Many To One,如何强制Hibernate不将重复值插入感兴趣的表中,而只是引用现有值 以下是一个例子: 性别实体: @Entity(name = "genders") public class GenderEntity { @Id @Column(name = "gender_id") @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; @Enumerated(EnumType.STRING) @C
@Entity(name = "genders")
public class GenderEntity {
@Id
@Column(name = "gender_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Enumerated(EnumType.STRING)
@Column(name = "value")
private GenderEnum value;
@OneToMany(mappedBy = "gender", fetch = FetchType.EAGER)
private Set<Person> genderNames = new HashSet<>();
}
NameWeightDescriptionEntity {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
@Column(name = "name_id")
private Integer id;
@Column(name = "name", unique = true, nullable = false)
private String name;
@Column(name = "weight", nullable = false)
private Short weight;
@Column(name = "description", unique = true, nullable = false)
private String description;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "gender_id")
private GenderEntity gender;
}
这个想法是当一个人创造一个人时,将其性别设定为:
person.setGender(new GenderEntity() {{ setValue(GenderEnum.M); }});
Hibernate总是试图创造一个新的性别记录
需要做的是:Hibernate在数据库中插入的新记录与为GenderEntity提供的不同枚举值一样多。在我的例子中,只有2个,因为GenderEnum非常简单:
public enum GenderEnum {
M,
F
}
因此,如果有人在其代码中键入:
person1.setGender(new GenderEntity() {{ setValue(GenderEnum.M); }});
person2.setGender(new GenderEntity() {{ setValue(GenderEnum.F); }});
person3.setGender(new GenderEntity() {{ setValue(GenderEnum.M); }});
然后在GenderEntity的数据库表中只能创建两条记录
目前,将有3行不是预期的。与new类似,这是不可能的。唯一的解决方案显然是将GenderEntity创建移到person对象之外,以便在代码中引用它们
引用工作正常。看起来与new类似,这是不可能的。唯一的解决方案显然是将GenderEntity创建移到person对象之外,以便在代码中引用它们 参考资料很好用