JPA Many To Many Duplicate record in join table
来源:互联网 发布:cnstorm知乎 编辑:程序博客网 时间:2024/06/14 00:25
在使用JPA 进行多对多关系处理的时候,会出现中间表插入多条重复数据的问题
其实原因很简单,把多对多的结合对象换成Set就可以解决,如果用List就会造成重复记录的问题
附上代码:
@Entity
@Table(name = "groups")
public class Group extends BaseEntity {
private static final long serialVersionUID = 769557656518557214L;
private Brief brief;
private User owner;
private Set<User> members;
public Group() {
members = new HashSet<User>();
}
@OneToOne
@JoinColumn(name = "user_id")
public User getOwner() {
return owner;
}
public void setOwner(User owner) {
this.owner = owner;
}
@ManyToMany(mappedBy = "groups", fetch = FetchType.EAGER)
public Set<User> getMembers() {
return members;
}
public void setMembers(Set<User> members) {
this.members = members;
}
@Embedded
@AttributeOverrides({ @AttributeOverride(name = "name", column = @Column(name = "name") ),
@AttributeOverride(name = "description", column = @Column(name = "description") ) })
public Brief getBrief() {
return brief;
}
public void setBrief(Brief brief) {
this.brief = brief;
}
public Group addMembers(User user) {
this.members.add(user);
return this;
}
}
@Entity
@Table(name = "users", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }) })
public class User extends BaseEntity {
private static final long serialVersionUID = 531034985278921408L;
private String name;
private String password;
private String displayName;
private String headImgUrl;
private UploadFile headImg;
private UploadFile backgroundImg;
private String identifyNo;
private String phoneNo;
private Date dob;
private boolean male;
private boolean married;
private String roles;
private Value personHeight = new Value();
private Value personWeight = new Value();
private Device device;
private Section section;
@Exclude
@JsonIgnore
private Set<Group> groups;
public User() {
groups = new HashSet<Group>();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
@OneToOne
@JoinColumn(name = "file_id")
public UploadFile getHeadImg() {
return headImg;
}
public void setHeadImg(UploadFile headImg) {
this.headImg = headImg;
}
public String getIdentifyNo() {
return identifyNo;
}
public void setIdentifyNo(String identifyNo) {
this.identifyNo = identifyNo;
}
public String getPhoneNo() {
return phoneNo;
}
public void setPhoneNo(String phoneNo) {
this.phoneNo = phoneNo;
}
public Date getDob() {
return dob;
}
public void setDob(Date dob) {
this.dob = dob;
}
public boolean isMale() {
return male;
}
public void setMale(boolean male) {
this.male = male;
}
public boolean isMarried() {
return married;
}
public void setMarried(boolean married) {
this.married = married;
}
public String getRoles() {
return roles;
}
public void setRoles(String roles) {
this.roles = roles;
}
@ManyToOne
@JoinColumn(name = "device_id")
public Device getDevice() {
return device;
}
public void setDevice(Device device) {
this.device = device;
}
@ManyToOne
@JoinColumn(name = "section_id")
public Section getSection() {
return section;
}
public void setSection(Section section) {
this.section = section;
}
public String getHeadImgUrl() {
return headImgUrl;
}
public void setHeadImgUrl(String headImgUrl) {
this.headImgUrl = headImgUrl;
}
@Embedded
@AttributeOverrides({ @AttributeOverride(name = "amount", column = @Column(name = "h_amount") ),
@AttributeOverride(name = "unit", column = @Column(name = "h_unit") ) })
public Value getPersonHeight() {
return personHeight;
}
public void setPersonHeight(Value personHeight) {
this.personHeight = personHeight;
}
@Embedded
@AttributeOverrides({ @AttributeOverride(name = "amount", column = @Column(name = "w_amount") ),
@AttributeOverride(name = "unit", column = @Column(name = "w_unit") ) })
public Value getPersonWeight() {
return personWeight;
}
public void setPersonWeight(Value personWeight) {
this.personWeight = personWeight;
}
@OneToOne
@JoinColumn(name = "background_img_id")
public UploadFile getBackgroundImg() {
return backgroundImg;
}
public void setBackgroundImg(UploadFile backgroundImg) {
this.backgroundImg = backgroundImg;
}
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "group_user_relation", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = {
@JoinColumn(name = "group_id") }, uniqueConstraints = {
@UniqueConstraint(columnNames = { "user_id", "group_id" }) })
public Set<Group> getGroups() {
return groups;
}
public void setGroups(Set<Group> groups) {
this.groups = groups;
}
public User addGroups(Group group) {
this.groups.add(group);
return this;
}
}
- JPA Many To Many Duplicate record in join table
- Hibernate – Many-to-Many example – join table + extra column (Annotation)
- 【JPA】JPA映射之One to Many
- many-to-many性能
- hibernate-----many-to-many
- Hibernate many to many
- hibernate many-to-many
- many to many
- Many-to-many Query
- Many-to-Many
- many-to-many
- Hibernate Many-to-Many
- EJB3.0 many-to-many relation in action
- oracle to many database link in use
- hibernate one-to-many/many-to-one 使用中间表/使用join 标签
- hibernate one-to-many/many-to-one 使用中间表/使用join 标签
- Hibernate Many-To-Many Revisited
- hibernate many to many查询
- iOS跳转到蓝牙设置页面
- JS浏览器对象-windows对象、计时器、History对象、Location对象、Screen对象
- Hibernate验证注解
- iOS开发基础学习笔记——导航控制器2->导航栏(UINavigationBar)/工具栏(toolBar)/导航元素按钮(UINavigationItem)
- red5搭建直播转播服务器
- JPA Many To Many Duplicate record in join table
- 何时加入一家创业公司?
- 6.9.4 qmgr_active_done_25_generic函数:发送退信或延迟提醒信
- mysql innodb 优化 参数篇
- 2016.4.6第三方工具总结final
- 44、如何修改已经创建好的数据库的编码格式
- Java集合类操作优化经验总结
- 屏幕录制
- 如何在Linux上安装服务器管理软件Cockpit