JPA 2.0のCriteriaBuilderを使用して動的クエリを構築しました。私のアプリケーションはSpring 3.0、Hibernate 3.6.0 + JPA 2.0ベースです。実は私は1つがtaUser
ある2つのエンティティを持っているし、別の1は私のtaUser
クラスで、taContact
あることtaContact
との一対一の関係に多くを持っている一つの特性を、持っている私のPOJOクラス(サンプル例)JPA 2.0のCriteriaBuilderを使用して多対1リレーションシップの動的クエリを構築する方法
public class TaUser implements java.io.Serializable {
private int userId;
private TaContact taContact;
public int getUserId() {
return this.userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public TaContact getTaContact() {
return taContact;
}
public void setTaContact(TaContact taContact) {
this.taContact = taContact;
}
}
public class TaContact implements java.io.Serializable {
private int contactId;
public int getContactId() {
return this.contactId;
}
public void setContactId(int contactId) {
this.contactId = contactId;
}
private int contactNumber;
public int getContactNumber() {
return contactNumber;
}
public void setContactNumber(int contactNumber) {
this.contactNumber = contactNumber;
}
}
と私のORMの.xmlです
<entity class="com.common.model.TaUser" name="TaUser">
<table name="ta_user" />
<attributes>
<id name="userId">
<column name="USER_ID" />
<generated-value strategy="AUTO" />
</id>
<many-to-one name="taContact"
target-entity="TaContact">
<join-column name="Contact_id" />
</many-to-one>
</attributes>
</entity>
はどのような基準を使用して動的なクエリを構築することは、実際にこれは私がのcriteriasを使用して動的なクエリを構築するにそれを変更したい私のJPQLクエリで作成することができます。
String jpql =
"select * from Tauser user where user.userId = "1" and user.taContact.contactNumber="8971329902";
どのように2番目の状態を確認できますか?
user.taContact.contactNumber = "8971329902"
Root<T> rootEntity;
TypedQuery<T> typedQuery = null;
EntityManagerFactory entityManagerFactory = this.getJpaTemplate()
.getEntityManagerFactory();
CriteriaBuilder criteriaBuilder = entityManagerFactory
.getCriteriaBuilder();
CriteriaQuery<T> criteriaQuery = criteriaBuilder.createQuery(TaUser.class);
rootEntity = criteriaQuery.from(TaUser.class);
criteriaQuery.where(criteriaBuilder.equal(rootEntity.get("userId"),
"1"));
criteriaQuery.where(criteriaBuilder.equal(rootEntity.get("taContact.contactNumber"),
"8971329902")); --- here i m getting error
at
org.hibernate.ejb.criteria.path.AbstractPathImpl.unknownAttribute(AbstractPathImpl.java:110)
at org.hibernate.ejb.criteria.path.AbstractPathImpl.locateAttribute(AbstractPathImpl.java:218)
at org.hibernate.ejb.criteria.path.AbstractPathImpl.get(AbstractPathImpl.java:189)
at com.evolvus.core.common.dao.CommonDao.findByCriteria(CommonDao.java:155)
どのように私はこの問題を解決することができますか?
お願い:英語が母国語でない場合は問題ありません。しかし、LOLを書くことですべてを悪化させないようにしてください。「あなた」の代わりに「u」のように話してください。また、あなたが参照するクラス、パッケージ、テクノロジーのスペルを間違えないようにしてください。あなたの投稿はそのまま読むのが難しいです。 –
あなたの投稿を修正しようとしましたが、その答えは無関係です。なぜなら、質問はJPA 2 Criteria APIであり、Hibernate Criteria APIに関するものではないからです。 –
こんにちはショーンパトリックフロイド、2番目のコメントは正しいです。あなたは私に何か提案を与えることができないのですか? –