我正在尝试用Java完成我的第一步,我被下一个问题阻止了:我有这个hieararchy类"用户 - >旅行者"
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public class User {
// Some properties and accessors.
}
@Entity
@PrimaryKeyJoinColumn(name="user_id")
public class Traveller extends User{
// Some properties and accessors.
}
因此,我需要使用您的用户名搜索旅行者,这是一个User类属性。我在TravellerDao中试试这个:
public Traveller findByUsername(String username){
EntityManager em = PersistenceHelper.getEm();
TypedQuery<Traveller> query = em.createQuery("FROM Traveller WHERE username = ?1", Traveller.class);
query.setParameter(1, username);
return query.getSingleResult();
}
但是,捕获了javax.persitence.NoResultException。问题出在哪儿 ?在&#34;其中&#34; clausule?在加入?有什么想法吗?
注意:
1)层次结构正常运行&#34; find&#34;方法。并正确生成数据库。
2)我在Traveler表中有一个条目,该条目最多链接到User表中的一个。
3)在数据库中存在一个用户,其中包含我用来测试的用户名。
4)该方法正确获取&#34;用户名&#34;参数。
编辑:现在有效。问题是测试用例的执行顺序。查询工作正常。答案 0 :(得分:1)
我认为您的查询不正确,我相信您必须为要与之交互的每个实体命名别名。你试过这个吗?
"SELECT t FROM Traveller t WHERE t.username = ?1", Traveller.class
此外,在调用query.getSingleResult()时,您还必须强制转换结果。因为您将Traveller.class传递给由Class<T> resultClass
编辑:之后添加了1?如图所示。 http://www.objectdb.com/java/jpa/query/parameter#Ordinal_Parameters_index_
public Country getCountryByName(EntityManager em, String name) {
TypedQuery<Country> query = em.createQuery(
"SELECT c FROM Country c WHERE c.name = ?1", Country.class);
return query.setParameter(1, name).getSingleResult();
}