java - JPA2 JoinColumns JoinColumn 名称不受尊重。 (Hibernate 3.6 和 H2)

标签 java hibernate jpa jpa-2.0

这是简化的代码片段,省略了 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)
)

类(class)是:

@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 名称被忽略?

它抛出异常:

初始sessionFactory创建失败.org.hibernate.MappingException:无法从表client_personalities中的物理名称personality_type_id找到逻辑列名称

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

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

例如:

list 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)

最佳答案

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

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

关于java - JPA2 JoinColumns JoinColumn 名称不受尊重。 (Hibernate 3.6 和 H2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7836528/

相关文章:

java - 无法使用 Selenium 和 Java 11 导入 o​​rg.openqa.selenium.WebDriver

java - 反射和私有(private)本地方法

hibernate - 在Grails中,如何获取域代理而不是完整记录

java - sessionFactory 没有被注入(inject)。它始终为空

java - JPA 和类路径

java - JPA 2 远程标准?

mysql - 我如何操作嵌套查询 j2ee hibernate

java - 如何在另一个变量中创建一个变量?

java - 如何在 Android Studio 中为静态导入修复 "Organize Imports"

java - 在 netbeans 中从数据库创建实体类时如何过滤表?