通过继承属性查询

时间:2014-11-29 03:15:41

标签: java hibernate jpa

我正在尝试用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;参数。

编辑:现在有效。问题是测试用例的执行顺序。查询工作正常。

1 个答案:

答案 0 :(得分:1)

我认为您的查询不正确,我相信您必须为要与之交互的每个实体命名别名。你试过这个吗?

"SELECT t FROM Traveller t WHERE t.username = ?1", Traveller.class

此外,在调用query.getSingleResult()时,您还必须强制转换结果。因为您将Traveller.class传递给由Class<T> resultClass

指定的createQuery调用

编辑:之后添加了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();
  }