Java 通过外键查找 EJB
Java EJB find by Foreign key
我看过有关 EJB 的教程,并尝试在我自己的项目中使用它。
如果我尝试调用 find()
函数并按行 ID 进行搜索,我会得到结果。但是现在我遇到的问题是我只有外键可以搜索。
如果我使用 find()
并将外键作为参数传递,则会出现异常。 java.lang.IllegalArgumentException
现在我想知道是否甚至可以在没有主键的情况下使用 find()
函数,或者我应该用我的 SQL-Query
在里面创建一个 DAO 吗?
您的项目可能已经在使用带有实体管理器的 JPA,而不是构建 DAO,它本身已经是一个 DAO。
如果是这种情况,我会构建一个特定的命名查询,方法是将一个命名查询放在您的实体之上,或者放在一个方便的实用程序中 class:
@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();
我看过有关 EJB 的教程,并尝试在我自己的项目中使用它。
如果我尝试调用 find()
函数并按行 ID 进行搜索,我会得到结果。但是现在我遇到的问题是我只有外键可以搜索。
如果我使用 find()
并将外键作为参数传递,则会出现异常。 java.lang.IllegalArgumentException
现在我想知道是否甚至可以在没有主键的情况下使用 find()
函数,或者我应该用我的 SQL-Query
在里面创建一个 DAO 吗?
您的项目可能已经在使用带有实体管理器的 JPA,而不是构建 DAO,它本身已经是一个 DAO。
如果是这种情况,我会构建一个特定的命名查询,方法是将一个命名查询放在您的实体之上,或者放在一个方便的实用程序中 class:
@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();