我有这种情况,我想引用已更新任务对象的用户的名字和姓氏。这应该是一个直接的检索,但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字段。是否不可能这样做,因为该字段来自辅助表?错误消息使得听起来这是合理的事情。
有什么建议吗?
答案 0 :(得分:0)
如Hibernate bug https://hibernate.atlassian.net/browse/HHH-7713
所述您可以使用给定的重音来应用变通方法来识别您的referencedColumnName`
SecondaryTable(name="LOCAL_USER",
pkJoinColumns={
@PrimaryKeyJoinColumn(name="PORTAL_USER_ID", referencedColumnName="`USERID`")})