2016-05-12 9 views
0

私は、Journal JournalがPrimary Keyであり、JournalIDがUnique ConstraintであるテーブルJournalの列がほとんどありません。hibernateのSaveOrUpdateが予期せず動作する

JournalKeyは自動生成されたキーです。

insertOrUpdateを使用して保存を開始すると、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

に定義されているAutoをどのように行うことができますは、JPAでAUTOアルゴリズムで文字列を生成しますか?

これは間違っています。 IdフィールドがStringの場合、UUIDを使用して自動ストリングを生成できます。それ以外の場合は、Long型としてIDを作成します。

click here「JPAでUUID algoを使用して文字列を実装する方法」を参照してください。

+0

私はjournalKeyを更新しました長いですが、それでも私には同じエラーが発生しますcom.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:キー 'JournalID'の重複したエントリ '1b58bc89-bd49-45b5-af57-7df8c42006a9' –

+0

例外に基づいて、私は結論づけましたあなたはUUIDアルゴリズムを使用しています。私はあなたがいくつかの設定を欠いていると信じています。したがって、生成するUUIDは1つしかなく、DBに格納しています。一度は、それは格納することができますが、同じUUIDで2回目に同じ例外が発生します。 – sitakant

関連する問題