同様の構造を持つ 3 つのデータベース テーブルがあるため、ID として再利用する Embeddable クラスを作成しました。
@Embeddable
public class AcceptanceCriteriaId implements Serializable{
private String requestValue;
private String bpvValue;
private Long customerId;
@Column(name="requestValue")
public String getRequestValue() {
return requestValue;
}
public void setRequestValue(String requestValue) {
this.requestValue = requestValue;
}
@Column(name="bpvValue")
public String getBpvValue() {
return bpvValue;
}
public void setBpvValue(String bpvValue) {
this.bpvValue = bpvValue;
}
@Column(name="customerId")
public Long getCustomerId() {
return customerId;
}
public void setCustomerId(Long customerId) {
this.customerId = customerId;
}
}
テーブルの 3 つのエンティティ クラスは、列の名前を独自のものに上書きします。
@Entity
@Table(name = "RSK_XML_TYPE_AC_TBL")
public class TypeAcceptanceCriteria{
private AcceptanceCriteriaId acceptanceCriteriaId;
private ResponseValue response;
@EmbeddedId
@AttributeOverrides(
{
@AttributeOverride(name = "requestValue", column = @Column(name = "REQUEST_TYPE")),
@AttributeOverride(name = "bpvValue", column = @Column(name = "bpv_type")),
@AttributeOverride(name = "customerId", column = @Column(name = "customer_uid"))
}
)
public AcceptanceCriteriaId getAcceptanceCriteriaId() {
return acceptanceCriteriaId;
}
public void setAcceptanceCriteriaId(AcceptanceCriteriaId acceptanceCriteriaId) {
this.acceptanceCriteriaId = acceptanceCriteriaId;
}
@Column(name="response_uid")
@Type(type="com.modules.avm.riskxmlservice.response.utils.ResponseValueEnumType")
public ResponseValue getResponse() {
return response;
}
public void setResponse(ResponseValue response) {
this.response = response;
}
}
したがって、ここでエラーがなければ、次の 2 つの方法のいずれかが機能すると予想していました。
@Repository
public class HibernateTypeAcceptanceCriteriaDAO extends AbstractAvmAppHibernateDAO<TypeAcceptanceCriteria> implements TypeAcceptanceCriteriaDAO {
protected HibernateTypeAcceptanceCriteriaDAO() {
super(TypeAcceptanceCriteria.class);
}
public TypeAcceptanceCriteria getTypeAcceptanceCriteria_v1(String requestValue, String bpvValue, Long customerId) {
return (TypeAcceptanceCriteria) createCriteria()
.add(Restrictions.eq("acceptanceCriteriaId.requestValue", requestValue))
.add(Restrictions.eq("acceptanceCriteriaId.bpvValue", bpvValue))
.add(Restrictions.in("acceptanceCriteriaId.customerId", new Long[]{0L, customerId}))
.add(Restrictions.sqlRestriction(" ROWNUM = 1 "))
.addOrder(Order.desc("acceptanceCriteriaId.customerId"))
.uniqueResult();
}
@Override
public TypeAcceptanceCriteria getTypeAcceptanceCriteria(String requestValue, String bpvValue, Long customerId) {
return (TypeAcceptanceCriteria) getSession().createSQLQuery("select * from RSK_XML_type_AC_TBL where request_type = :requestValue and bpv_type= :bpvValue and customer_uid in (0, :customerId) and rownum = 1 order by customer_uid desc")
.setResultTransformer(new AliasToBeanResultTransformer(TypeAcceptanceCriteria.class))
.setString("requestValue", requestValue)
.setString("bpvValue", bpvValue)
.setLong("customerId", customerId).uniqueResult();
}
}
しかし、次のエラーが発生しました: java.lang.RuntimeException: java.lang.NoSuchFieldException: REQUEST_TYPE
誰かが私が間違っていることを説明してくれたら本当にありがたいです...ありがとう!!