2013-02-26 83 views
0

有人能幫助我在Hibernate中,爲了下面的情況制定相應的註釋:Hibernate的一對多與JoinTable ID生成

我有三個表:

賬戶,卡和AccountCard。

AccountCard正在加入卡和賬戶之間OneToMany關係的表格(賬戶有很多卡,卡僅附加到一個賬戶)。

我需要添加到帳戶列表卡屬性和卡模型帳戶帳戶屬性。這很容易。

問題是我得到「不能插入空值到AccountCard.id」,同時堅持卡與帳戶。 另外我需要使用序列來生成連接表的ID,但不知道如何。

任何幫助將不勝感激。

這裏是卡代碼:

@ManyToOne(fetch = FetchType.LAZY) 
@JoinTable(name = "account_card", joinColumns = @JoinColumn(name = "crd_id"), inverseJoinColumns = @JoinColumn(name = "acc_id")) 
private Account account; 

我不想在Account類的映射,因此不添加列表卡。

+0

它將幫助我們,如果你顯示的帳戶和卡實體的代碼至少包括其關係的註釋。 – 2013-02-26 11:37:28

+0

我添加了卡片部分,在帳戶我不想有一個參考卡片 – Mungo 2013-02-26 12:03:08

回答

0

您是否嘗試在數據庫中首先生成表(在我的情況下爲mysql),然後用像nebans這樣的ide創建實體?在MySQL中的自動增量ID列,然後結束與:

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Basic(optional = false) 
@Column(name = "ID") 
private Integer id; 

退房http://netbeans.org/kb/docs/javaee/ecommerce/entity-session.html爲樣本如何使用NetBeans從數據庫中創建實體

+0

正如我所說 - 我需要使用序列 - autoincrement不是一個選項,也加入表中沒有模型在我的應用程序 - 這是不需要的 – Mungo 2013-02-26 11:27:10

+1

我沒有嘗試,但將其更改爲@GeneratedValue(strategy = GenerationType.SEQUENCE)是不夠的? – Kaffee 2013-02-26 11:29:05

+0

嗯,沒有模型類連接表AccountCard - 所以你想在哪裏添加註釋?我正在考慮類似@CollectionId的東西,但這隻適用於集合,在這裏我有單引用(因爲它是OneToMany) – Mungo 2013-02-26 11:39:41

0

在你@JoinTable註釋,我看到引用到account_name表不是AccountCard。實際上是否有某個AccountCard表?

一個連接表通常不需要它自己的id鍵,如果你有休眠自動生成你的表DDL它不會包含一個。

如果確實需要連接表上的ID,我不認爲有辦法或需要讓hibernate意識到它,但是您應該在SQL DDL中創建列NOT NULL AUTO_INCREMENT