2013-02-26 53 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