繁体   English   中英

JPA:复合主键和外键

[英]JPA: Composite Primary and Foreign Keys

我有一些旧表的情况。
具有复合PK(资产ID,财政ID,记录类型)的资产
具有复合PK(资产ID,财政ID,系统ID)的AssetSystems

他们有关系。
资产1-1 AssetSystems
在哪里,系统FK(assetId,countryId)

这是我的代码。

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:为com.wb.adapter.model.AssetSystem类提供了错误类型的ID。 预期:com.wb.adapter.model.AssetSystemKey类,在com.wb.adapter.main的org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:274)处获得com.wb.adapter.model.AssetKey类。 com.wb.adapter.main.AssetDbReader.main(AssetDbReader.java:30)处的AssetDbReader.readDB(AssetDbReader.java:47)原因:org.hibernate.TypeMismatchException:为com.wb类提供了错误类型的ID。 adapter.model.AssetSystem。 预期:com.wb.adapter.model.AssetSystemKey类,获得com.wb.adapter.model.AssetKey类

我也尝试用简单的JoinColumn替换PrimaryKeyJoinColumns ,这导致此异常。

由以下原因引起:org.hibernate.AnnotationException:com.wb.adapter.model.AssetSystem.asset的com.wb.adapter.model.Asset的referencedColumnNames(assetID,financialPeriodID)未映射到单个属性

我是JPA的新手,不确定自己在做什么错。 此外,是否有更好的方法在JPA中为上述表建模,这实际上将解决此问题。

提前谢谢了。

萨希尔

尝试将@PrimaryKeyJoinColumns替换为@JoinColumns,并添加@MapsId(“ compositeKey”)作为资产参考。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM