【发布时间】:2009-09-28 16:29:39
【问题描述】:
我一定很愚蠢,但我对使用 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();
}
最终更新 一切都与模型有关:请参阅这篇文章的 cmets。本质上,从逆向工程文件生成的模型是无效的,因为我没有真正唯一的密钥。一旦我解决了这个问题(这里是由 cmets 推动的),一切都很好。
【问题讨论】:
-
您能否发布
findByMyValue()方法的来源以及它使用的查询(如果有)? -
感谢您的回复!我已经用来源更新了原始帖子