hibernate中的SaveOrUpdate意外地工作

时间:2016-05-12 06:47:10

标签: java mysql hibernate

我在Journal Journal中有几列,其中JournalKey是主键,而JournalID具有唯一约束。

JournalKey是自动生成密钥。

现在,当我使用insertOrUpdate开始保存时,我预计hibernate会在JournalID不存在时插入行,否则更新它。

由于JournalKey是自动生成的,因此它没有多大的作用。 但是它给了我UniqueConstraintViolation错误。

请帮助。

期刊保存为

    public Object saveOrUpdateObj(Object obj){
    Session session = HibernateUtil.getSession();
    try{
        session.beginTransaction();
        session.saveOrUpdate(obj);
        session.getTransaction().commit();
    }finally{
        session.close();
    }
    return obj;
}

Journal类以这种方式定义

@Entity
@Table(name="Dim_Journal")
public class Journal {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="JournalKey")
private Long journalKey;

@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="FK_Org_Key")
private Organisation organisation;

@Column(name="JournalID")
private String journalID;

@Column(name="JournalDate")
private Date journalDate;

@Column(name="JournalNumber")
private String JournalNumber;

@Column(name="JournalCreationDate")
private Date createdDateUTC;

@Column(name="SourceID")
private String SourceID;

@Column(name="SourceType")
@Enumerated(EnumType.STRING)
private JournalSourceType sourceType;

@Transient
private List<JournalLine> journalLines;


@Transient
private Long organisationId;

}

1 个答案:

答案 0 :(得分:0)

如何在JPA中使用AUTO算法自动生成String?

你做错了。如果Id字段是String,则可以使用UUID生成自动String,否则将Id设置为Long类型。

click here看看如何在JPA中使用UUID算法实现String。