2016-05-12 44 views
0

我在表中有幾列其中JournalKey是主鍵,而JournalID具有唯一約束。在休眠狀態下SaveOrUpdate意外地工作

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; 
} 

雜誌類這樣定義

@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

但'journalKey'是主鍵,在這種情況下JournalID的值不相關。除非我錯過了這一點。請發佈整個代碼,您堅持實體 – rapasoft

+0

@rapasoft:代碼添加 –

+0

什麼版本的Hibernate。 –

回答

0

你怎麼能自動生成在JPA AUTO算法字符串?

這是錯誤的你正在做。如果Id字段是字符串,則可以使用UUID生成自動字符串,否則將ID設置爲長類型。

click here看看,如何在JPA中用UUID算法實現字符串。

+0

我已經更新了journalKey Long ..但它仍然給我同樣的錯誤com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:重複條目'1b58bc89-bd49-45b5-af57-7df8c42006a9'爲'JournalID' –

+0

根據例外,我總結那你已經使用了UUID算法。我相信你錯過了一些配置,因此你只生成一個UUID並將它存儲到數據庫中。有一次,它可以存儲,但是第二次使用相同的UUID,你會得到相同的異常。 – sitakant