我有一段关系:客户有一个帐户。所以以下实现是
Account.class:
@Column(name = "client_id")
@GeneratedValue(generator = "gen")
@GenericGenerator(name = "gen", strategy = "foreign",
parameters = { @Parameter(name = "property", value = "clientDTO") })
private int client_id;
Client.class:
@OneToOne(cascade = CascadeType.ALL)
private AccountDTO accountDTO;
我初始化客户端,帐户并将帐户设置为客户端,但是当我尝试将其保存到数据库时,我得到一个例外:
java.sql.BatchUpdateException:批量输入0插入 public.accounts(balance,client_id,comment,credit_limit,id)值 (1000.0,0,评论,0.0,8)被中止。调用getNextException 看原因。
如您所见,我的应用尝试使用client_id = 0;
插入帐户我该如何解决?
答案 0 :(得分:1)
使用java.lang.Integer而不是原始int--这样Hibernate可以告诉它尚未设置,并且需要生成(或传递为null)。或者您可以指定unsaved-value = 0(不知道如何从注释中执行此操作)
答案 1 :(得分:0)
看看我对this related question的回答。如果值应与client_id
表的id相同,则不需要account
表中的额外account
列。您可以将帐户表的ID设置为主键和引用client
表的外键。
这就是您@GenericGenerator
与strategy = 'foreign'
的使用建议,但您缺少@PrimaryJoinColumn
注释。除此之外,您的@OneToOne
属性是错误的。根据您的例外,账户实体应引用客户,反之亦然。
HTH
答案 2 :(得分:0)
我已经解决了。主要问题是双向关系。所以我必须将Account设置为Client,将Client设置为Acount。谢谢大家!