Hibernate映射异常与多个@Id
问题描述:
我有两个实体之间有一个关系。 这是我的第一个实体:Hibernate映射异常与多个@Id
@Entity
@Table(name = "APPLICATION_DEVICE")
public class ApplicationDevice implements Serializable {
[...]
@Id
@ManyToOne
@JoinColumn(name = "udid", nullable=false)
public Device getDevice()
{
return device;
}
public void setDevice(Device device)
{
this.device = device;
}
@Id
public Long getApplicationId()
{
return applicationId;
}
public void setApplicationId(Long applicationId)
{
this.applicationId = applicationId;
}
[...]
注意它有两个字段primery键:的applicationID和设备(它是作为另一个关系)。
而我的其他企业为:
@Entity
@Table(name = "SEGMENT_APPLICATION_DEVICES")
public class SegmentApplicationDevice
{
[...]
@Id
@GeneratedValue
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
@ManyToOne
public ApplicationDevice getApplicationDevice()
{
return applicationDevice;
}
public void setApplicationDevice(ApplicationDevice applicationDevice)
{
this.applicationDevice = applicationDevice;
}
[...]
而这里的休眠的异常,当它试图映射此实体:
Exception constructing service 'HibernateSessionSource': Error invoking service builder method org.apache.tapestry5.hibernate.HibernateCoreModule.buildHibernateSessionSource(Logger, List, RegistryShutdownHub) (at HibernateCoreModule.java:123) (for service 'HibernateSessionSource'): Foreign key (FK5B8CB9821C11FEAE:SEGMENT_APPLICATION_DEVICES [applicationDevice_applicationId])) must have same number of columns as the referenced primary key (APPLICATION_DEVICE [udid,applicationId])
什么,我doint错了吗?谢谢!
答
ApplicationDevice具有由2列组成的组合ID。但是ApplicationDovice的manytoone却没有指定列(应该有2个),所以使用了一个带有“entityname_id”的列的默认值。
要减轻这一点,请指定两个列作为ApplicationDevice的连接列。