JPA2 JoinColumns JoinColumn名称未受到尊重。 (Hibernate 3.6和H2)

时间:2011-10-20 13:19:05

标签: 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)
)

课程是:

@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 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(ISBNs 978-1-4302-1956-9 / 978-1-4302-1957-6)

1 个答案:

答案 0 :(得分:0)

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

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