jpa の 2 つのクラスを OneToOne 関係で関連付けようとしています。この複合キーを持つクラス A があります。
@Embeddable
public static class AId implements Serializable
{
private static final long serialVersionUID = -3668842379109008885L;
private long idA;
private String codType;
private Date startDate;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((codType == null) ? 0 : codType.hashCode());
result = prime * result + (int) (idA ^ (idA >>> 32));
result = prime * result
+ ((startDate == null) ? 0 : startDate.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AId other = (AId) obj;
if (codType == null) {
if (other.codType != null)
return false;
} else if (!codType.equals(other.codType))
return false;
if (idA != other.idA)
return false;
if (startDate == null) {
if (other.startDate != null)
return false;
} else if (!startDate.equals(other.startDate))
return false;
return true;
}
public long getIdA() {
return idA;
}
public void setIdA(Long idA) {
this.idA = idA;
}
public String getCodType() {
return codType;
}
public void setCodType(String codType) {
this.codType = codType;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
}
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name="idA", column=@Column(name="ID_A")),
@AttributeOverride(name="codType", column=@Column(name="COD_TYPE")),
@AttributeOverride(name="startDate", column=@Column(name="START_DATE"))
})
private AId idAId;
単純な主キーを持つクラス B
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="GEN_ID_STORE" )
@Column(name="ID")
private Long id;
@OneToOne(fetch=FetchType.EAGER)
private A a;
ここで私の質問は、idAId.idA フィールドのみを使用してこれら 2 つのクラスを関連付けるにはどうすればよいかということです。B テーブルには ID_A 列のみを配置し、他の列は配置したくないためです。私の問題は、codType = 'COD' および startDate = null のレコードのみをテーブル A から取得する必要があることです。実際、他の 2 つのキーは固定されているため重要ではありません。私に何ができる?
ブリッジテーブルは許可されていません:D
ご協力いただきありがとうございます。