Java Hibernate-更新@OneToMany列时重复输入
我有userInfo实体和ChannelDetails实体Java Hibernate-更新@OneToMany列时重复输入,java,mysql,hibernate,Java,Mysql,Hibernate,我有userInfo实体和ChannelDetails实体 public class UserInfoDO implements Serializable { @Column(name = "id") @Id @GeneratedValue private int id; @Column(name = "`type`") private String type; @Column(name = "`value`") private
public class UserInfoDO implements Serializable {
@Column(name = "id")
@Id
@GeneratedValue
private int id;
@Column(name = "`type`")
private String type;
@Column(name = "`value`")
private String value;
@Column(name = "created_on")
private Date createdOn;
@OneToMany(orphanRemoval = true, mappedBy = "identifierId", fetch = FetchType.EAGER)
private Set<ChannelDetailsDO> channelDetails = new HashSet<ChannelDetailsDO>();
}
public class ChannelDetailsDO {
@Column(name = "id")
@Id
@GeneratedValue
private int id;
@Column(name = "channel")
private String channel;
@Column(name = "is_blocked")
private int isBlocked;
@Column(name = "blocking_reason")
private String blockingReason;
@Column(name = "created_on")
private Date createdOn;
@Column(name = "updated_on")
private Date updatedOn;
@ManyToOne(targetEntity = UserInfoDO.class, cascade = CascadeType.MERGE)
@JoinColumn(name = "identifier_id")
private UserInfoDO identifierId;
}
public类UserInfoDO实现可序列化{
@列(name=“id”)
@身份证
@生成值
私有int-id;
@列(名称=“`type`”)
私有字符串类型;
@列(名称=“`value`”)
私有字符串值;
@列(name=“已创建”)
私人约会;
@OneToMany(orphanRemoving=true,mappedBy=“identifierId”,fetch=FetchType.EAGER)
私有集channelDetails=newhashset();
}
公共类ChannelDetailsDO{
@列(name=“id”)
@身份证
@生成值
私有int-id;
@列(name=“channel”)
专用字符串通道;
@列(name=“被阻止”)
私有int被阻止;
@列(name=“阻塞原因”)
私有字符串阻塞原因;
@列(name=“已创建”)
私人约会;
@列(name=“已更新”)
私人日期更新;
@manytone(targetEntity=UserInfoDO.class,cascade=CascadeType.MERGE)
@JoinColumn(name=“identifier\u id”)
私有用户infodo-identifierId;
}
有一个更新场景,其中对于UserInfo,可以更新、添加频道
例如:对于id=1且值=2222的用户,
channelDetails是[{channel:123,isblocked:true,blockReason:“some”},{channel:124,isblocked:true,blockReason:“some”}]
现在我想用通道细节124来更新用户,同时还要添加一个通道细节125。当我这样做的时候。将为124创建重复的行。为了解决这个问题,我在通道列上保留了唯一的约束,但是125没有添加错误:
ChannelDetailsDO条目中的null id(发生异常后不要刷新会话)
如果尚未在数据库中,需要进行哪些更改才能更新ChannelDetails以及添加它们。添加创建方法,Channel.id是否是数据库级别上自动生成的id列?这是胡乱猜测!如果您还没有在
ChannelDetailsDO
类中实现equals
和hashcode
方法,只需尝试一下。