レガシーテーブルがいくつかある状況があります。
複合 PK (assetId、fiscalId、recordType) を持つ資産
複合 PK (assetId、fiscalId、systemId) を持つ AssetSystems
そして、彼らには関係があります。
資産 1 - 1 AssetSystems
ここで、Systems 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
}
DBにアクセスしようとすると、この例外が発生します
java.lang.IllegalArgumentException: org.hibernate.TypeMismatchException: クラス com.wb.adapter.model.AssetSystem に間違ったタイプの ID が提供されました。予想: クラス com.wb.adapter.model.AssetSystemKey、取得したクラス com.wb.adapter.model.AssetKey は com.wb.adapter.main の org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:274) にあります。 com.wb.adapter.main.AssetDbReader.main(AssetDbReader.java:30) の AssetDbReader.readDB(AssetDbReader.java:47) 原因: org.hibernate.TypeMismatchException: クラス com.wb に間違ったタイプの ID が提供されました。アダプター.モデル.アセットシステム. 予想: クラス com.wb.adapter.model.AssetSystemKey、クラス com.wb.adapter.model.AssetKey を取得
また、 PrimaryKeyJoinColumnsを単純なJoinColumnに置き換えてみたところ、この例外が発生しました。
原因: org.hibernate.AnnotationException: 単一のプロパティにマップされていない com.wb.adapter.model.Asset を参照する com.wb.adapter.model.AssetSystem.asset の referencedColumnNames(assetID、fiscalPeriodID)
私はJPAを初めて使用し、何が間違っているのかわかりません。また、JPAで上記のテーブルをモデル化するより良い方法はありますか?これにより、この問題が実質的に解決されます。
よろしくお願いします。
サヒール