我一定很愚蠢,但我对使用 MyEclipse 7.5 的 JPA 问题束手无策。
我正在通过 JPA 访问 DB2 数据库(在 AS400 上)。我对一个简单的表进行了逆向工程,为 DAO 提供了一些精确的“查找”方法。到现在为止还挺好。
如果我因此在表上运行 SELECT 语句,我会得到 4 行:
SELECT * FROM MyTable WHERE MyValue = '1234'
但是,如果我尝试通过 JPA 访问这 4 条相同的记录,我会得到一个大小合适的列表 (4),但其中包含 4 个完全相同的对象,即找到的第一个对象的所有副本:
List <MyTableObject> objects = dao.findByMyValue("1234");
就好像 DAO 类创建的内部 Query 对象无法遍历数据行一样。我已经以多种方式调整了 reveng.xml 文件,并且我已经修改了生成的 DAO,但我一无所获。我在这里错过了一些非常明显的东西吗?我只想以与常规 SELECT 语句返回结果集相同的方式获取对象列表!
(这是 MyEclipse 7.5,使用 Hibernate 3.2 及其关联的 JPA 库)。
更新:这是 findByMyValue() 传递给的生成代码(为清楚起见,删除了登录/尝试捕获):
@SuppressWarnings("unchecked")
public List<PolicyStatFile> findByProperty(String propertyName, final Object value)
{
final String queryString = "select model from MyTableObject model where model." + propertyName + "= :propertyValue";
Query query = getEntityManager().createQuery(queryString);
query.setParameter("propertyValue", value);
return query.getResultList();
}
最后更新 这一切都与模型有关:请参阅对这篇文章的评论。本质上,从逆向工程文件生成的模型是无效的,因为我没有真正唯一的密钥。一旦我解决了这个问题(受到此处评论的启发),一切都很好。