相关辅助表上的Hibernate MappingException

时间:2012-02-06 19:11:24

标签: hibernate hibernate-mapping

我有这种情况,我想引用已更新任务对象的用户的名字和姓氏。这应该是一个直接的检索,但Hibernate没有像我期望的那样连接关联。以下是对象定义:

Task Object:
@Entity
@Table(name = "TASKS")
public class TaskBean {
    ...
    @ManyToOne(targetEntity = UserBean.class, optional=true)
    @JoinColumn(name="MODIFIED_BY", referencedColumnName="EMPLOYEE_ID")
    public User getUser()
    ...



User Object:
@Entity
@Table(name = "USER_")
@SecondaryTable(name="LOCAL_USER", 
        pkJoinColumns={
            @PrimaryKeyJoinColumn(name="PORTAL_USER_ID", referencedColumnName="USERID")})

public class UserBean {
    private BigDecimal userId; // USERID
    private String firstName; // FIRSTNAME
    private String lastName; // LASTNAME
    private String employeeId; // EMPLOYEE_ID

 ....

    @Column(name="EMPLOYEE_ID", table="LOCAL_USER", updatable=false, insertable=false)
    public String getEmployeeId() {
         return employeeId;
    }

问题在于TaskBean上的@ManyToOne定义。当我尝试对TaskBeans运行单元测试时,我得到以下异常:

  

org.hibernate.MappingException:无法找到具有逻辑名称的列:org.hibernate.mapping.Table(USER_)中的EMPLOYEE_ID及其相关的supertables和secondary tables

这对我来说没有意义,因为我在UserBean中明确定义了EMPLOYEE_ID字段。是否不可能这样做,因为该字段来自辅助表?错误消息使得听起来这是合理的事情。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如Hibernate bug https://hibernate.atlassian.net/browse/HHH-7713

所述

您可以使用给定的重音来应用变通方法来识别您的referencedColumnName`

SecondaryTable(name="LOCAL_USER", 
    pkJoinColumns={
        @PrimaryKeyJoinColumn(name="PORTAL_USER_ID", referencedColumnName="`USERID`")})