2013-03-07 39 views
0

有可能oracle表有一個複合主鍵oracle sequenceid + createtimestamp,但@Entity類我們只有@id(sequenceid)主鍵?我們將添加時間戳用於表格分區的目的,後者用於清除。在存儲實體時,我們將始終添加時間戳值。從數據的角度來看,id本身就是這種情況下記錄的主要關鍵。我可以使用主鍵創建實體嗎?JPA2 PrimaryKey與Oracle主鍵

+0

「PriamryKey」?你確定你拼寫正確嗎? – 2013-03-07 19:53:20

+0

PrimaryKey我的意思是:-) – 2013-03-07 19:59:05

回答

0

在這種情況下,您必須在@ Entity類中創建複合主鍵。你可以按照下面的例子

@Entity 
@Table(name="RELEASE_PERSON") 
@IdClass(ReleasePersonPK.class) 
public class ReleasePerson implements Serializable { 

@Column(name="ORDER_NO", nullable=false, precision=2) 
private Integer orderNo; 

@Id 
@Column(name="RELEASE_ID", insertable=false,updatable=false) 
private long releaseId; 

@Id 
@Column(name="PERSON_ID", insertable=false,updatable=false) 
private long personId; 

@ManyToOne 
@JoinColumn(name = "PERSON_ID", referencedColumnName = "PERSON_ID") 
private Person person; 

@ManyToOne 
@JoinColumn(name = "RELEASE_ID", referencedColumnName = "ID") 
private Release release; 

和身份證類將看起來像下面

@Embeddable 
public class ReleasePersonPK implements Serializable { 

/** 
* 
*/ 
private static final long serialVersionUID = -6286499269052596345L; 

private Person person; 

private Release release; 

在我ReleasePersone表例子中,我們將有複合主鍵從rRelease(ID)和人(PERSON_ID )。

讓我知道你是否需要別的東西。

+0

Thankyou。我的問題更多地是關於我們是否可以在oracle上使用複合鍵,並在jpa @Entity類上使用非複合鍵。 – 2013-03-08 15:16:13

0

答案是肯定的。正如你所說的那樣,id在表中是唯一的,那麼只需將sequenceId作爲PK放入實體即可。如果您不使用hibernate創建表或更新表的列,則它不關心數據庫中的實際內容。