Java Hibernate-更新@OneToMany列时重复输入

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

我有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 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
方法,只需尝试一下。