我看过一个关于EJB的教程,并尝试在我自己的Project中使用它。
如果我尝试调用find()
函数并按行ID搜索,则会得到我的结果。但现在我有问题,我只有外键搜索。
如果我使用find()
并将外键作为参数传递,则会出现异常。 java.lang.IllegalArgumentException
现在我想知道是否可以在没有主键的情况下使用find()
函数,还是应该在里面创建一个带有SQL-Query
的DAO?
答案 0 :(得分:2)
您的项目可能已经利用了JPA和实体管理器,而不是构建DAO,而实体管理器本身就是DAO。
如果是这种情况,我会构建一个特定的命名查询,方法是在您的实体上放置一个命名查询,或者在一个方便的实用程序类中:
@Entity
@NamedQuery(
name="findMyEntityWithFK",
queryString="SELECT e FROM EntityTable e WHERE e.myForeignKey = :myForeignKey")
然后你可以简单地说:
Query queryByFK = em.createNamedQuery("findMyEntityWithFK");
queryByFK.setParameter("myForeignKey", "xyz");
Collection entities = queryByFK.getResultList();