【问题标题】:JPA2 JoinColumns JoinColumn name is not being respected. (Hibernate 3.6 and H2)JPA2 JoinColumns JoinColumn 名称未得到尊重。 (休眠 3.6 和 H2)
【发布时间】:2011-12-11 19:11:41
【问题描述】:

这里是简化的 sn-p,省略了 IdClass 细节。我遇到的问题是表定义是:

ClientPersonalityModel
(
 client_id int not null,
 personality_trait_id int not null,
 personality_type_id int not null,
 primary key (client_id, personality_trait_id, personality_type_id)
)

班级是:

@Entity
public class ClientPersonalityModel
{
    @Id 
    @ManyToOne
    @JoinColumn(name="client_id")
    protected ClientModel client;

    @Id
    @ManyToOne
    @JoinColumns({
        @JoinColumn(name="personality_trait_id",referencedColumnName="id"),
        @JoinColumn(name="personality_type_id",referencedColumnName="personality_type_id")
    })
    protected ClientPersonalityTraitModel trait;
}

但持久性框架正在尝试使用列 CLIENT_ID、TRAIT_ID、TRAIT_PERSONALITY_TYPE_ID。

为什么@JoinColumn 名称会被忽略?

抛出异常:

Initial sessionFactory creationfailed.org.hibernate.MappingException:无法从表client_personalities中的物理名称personality_type_id中找到逻辑列名

java.lang.ExceptionInInitializerError 原因:org.hibernate.MappingException:无法从表client_personalities中的物理名称personality_type_id中找到逻辑列名

这种情况在许多示例中都有介绍,但没有覆盖列名。

例如:

清单 10-12。具有依赖标识符的项目

@Entity
@IdClass(ProjectId.class)
public class Project {
    @Id private String name;
    @Id
    @ManyToOne
    private Department dept;
    // ...
}

来自 Pro JPA 2(ISBN 978-1-4302-1956-9 / 978-1-4302-1957-6)

【问题讨论】:

标签: java hibernate jpa jpa-2.0


【解决方案1】:

也许尝试分别切换到@PrimaryKeyJoinColumns/@PrimaryKeyJoinColumn

它对this case 有所帮助,我相信可能是同样的原因。

【讨论】:

  • 我希望避免这种情况,因为我使用的是 JPA2,我应该能够做到这一点。请参阅 PRO JPA 2 的第 285 页。
  • @JasonPyeron 感谢您的解释,我不知道这在 JPA 2 中发生了变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 2014-08-11
  • 2022-10-13
  • 2016-08-13
  • 2014-07-15
相关资源
最近更新 更多