2013-09-30 205 views
0

我有我有一些遗留表的情况。
资产,复合PK(由assetid,fiscalId,RECORDTYPE)
AssetSystems,复合PK(由assetid,fiscalId,systemId)已JPA:复合主键和外键

而且他们有关系。
资产1 - 1 AssetSystems
其中,系统FK(由assetid,fiscalId)

这里是我的代码。

Asset.java

@Entity 
@Table(name="Assets") 
public class Asset implements Serializable { 

@EmbeddedId 
private AssetKey compositeKey; 

@OneToOne(fetch=FetchType.LAZY, mappedBy="asset") 
private AssetSystem assetSystem; 

    // other fields and setters - getters 

} 

AssetKey.java

@Embeddable 
public class AssetKey implements java.io.Serializable { 

@Column(name="assetID") 
private String assetID; 

@Column(name="fiscalPeriodID") 
private BigInteger fiscalPeriodID; 

@Column(name="recordType") 
private String recordType; 

// setter - getter 

}

AssetSystem.java

@Entity 
@Table(name="AssetSystems") 
public class AssetSystem implements Serializable { 

@EmbeddedId 
private AssetSystemKey compositeKey; 

@OneToOne 
@PrimaryKeyJoinColumns({ 
    @PrimaryKeyJoinColumn(name="assetID", referencedColumnName="assetID"), 
    @PrimaryKeyJoinColumn(name="fiscalPeriodID", referencedColumnName="fiscalPeriodID") 
}) 
private Asset asset; 

// other fields and setter - getter 

} 

AssetSystemKey.java

@Embeddable 
public class AssetSystemKey implements Serializable { 

@Column(name="assetID") 
private String assetID; 

@Column(name="fiscalPeriodID") 
private BigInteger fiscalPeriodID; 

@Column(name="systemID") 
private BigInteger systemID; 

// setter - getter 
} 

当我试图访问数据库,我得到这个例外

java.lang.IllegalArgumentException异常: org.hibernate.TypeMismatchException:错误的类型提供的ID为 类com.wb. adapter.model.AssetSystem。预计:类 com.wb.adapter.model.AssetSystemKey,得到了类 com.wb.adapter.model.AssetKey在 org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:274)在 com.wb. adapter.main.AssetDbReader.readDB(AssetDbReader.java:47)at com.wb.adapter.main.AssetDbReader.main(AssetDbReader.java:30)引起 作者:org.hibernate.TypeMismatchException:提供的错误类型的id用于com.wb.adapter.model.AssetSystem类的 。预计:类 com.wb.adapter.model.AssetSystemKey,得到了类 com.wb.adapter.model.AssetKey

我也试图用简单的JoinColumn导致该更换PrimaryKeyJoinColumns例外。

所致:org.hibernate.AnnotationException: referencedColumnNames com.wb.adapter.model.AssetSystem.asset的(由assetid,fiscalPeriodID)引用 com.wb.adapter.model.Asset未映射到单一属性

我是JPA的新手,不确定我做错了什么。另外,有没有更好的方法来模拟JPA中的上述表格,这将有效解决此问题。

非常感谢提前。

萨赫勒

+0

你有没有发现你的代码有什么问题? – squallsv

回答

0

尝试与@JoinColumns取代@PrimaryKeyJoinColumns并添加@MapsId( “compositeKey”)的资产参考。

+0

这给出 - 由关系“资产”映射的ID的类型与目标实体的主键类不一致。 –