Hibernate 3 OneToOne使用PostgreSQL

时间:2011-12-12 19:25:34

标签: java hibernate postgresql

我有一段关系:客户有一个帐户。所以以下实现是

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;

插入帐户

我该如何解决?

3 个答案:

答案 0 :(得分:1)

使用java.lang.Integer而不是原始int--这样Hibernate可以告诉它尚未设置,并且需要生成(或传递为null)。或者您可以指定unsaved-value = 0(不知道如何从注释中执行此操作)

答案 1 :(得分:0)

看看我对this related question的回答。如果值应与client_id表的id相同,则不需要account表中的额外account列。您可以将帐户表的ID设置为主键引用client表的外键。

这就是您@GenericGeneratorstrategy = 'foreign'的使用建议,但您缺少@PrimaryJoinColumn注释。除此之外,您的@OneToOne属性是错误的。根据您的例外,账户实体应引用客户,反之亦然。

HTH

答案 2 :(得分:0)

我已经解决了。主要问题是双向关系。所以我必须将Account设置为Client,将Client设置为Acount。谢谢大家!