Hibernate映射异常与多个@Id

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的连接列。