【发布时间】:2014-03-29 10:13:42
【问题描述】:
我尝试为已创建的表仅建模几列。但是Hibernate 无法执行能够为应用程序返回数据的查询。
我在映射创建的表的模型中做这样的事情:
@Column(name="LOCALE_ID")
private String locale;
@Id
@Column(name="ID")
private Long ID;
@Column(name="TITLE")
private String title;
public Location () {}
public Long getID() {
return ID;
}
public void setID(Long ID) {
this.ID = ID;
}
public String getLocale() {
return locale;
}
public void setLocale(String locale) {
this.locale = locale;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
执行查询的方法如下所示:
String q = "SELECT l.title FROM " + className +
" l WHERE l.locale = '" + locale + '"';
List<Location> result = null;
try {
Transaction tx = getSession().beginTransaction();
result = (List<Location>)session.createQuery(q).list();
tx.commit();
} catch (Exception ex) {
ex.printStackTrace();
}
return result;
当我使用正确的参数调用此方法时,没有返回任何内容,但映射表包含可以使用这些参数获取的数据。
我不知道为什么休眠不能处理创建的表。
也许是生成模型的逆向工程,可以提供帮助,但我不知道如何执行此操作。
对此有什么想法吗?
【问题讨论】:
-
您是否已将 get/set 添加到实体?和@entity?
-
是的,它有 getter 和 setter
-
您的查询正在获取 l.title,它是一个字符串 - 您将结果列表转换为 Location 的任何特定原因?
-
位置是模型类
-
您的查询语法错误,您需要在末尾多加一个引号,例如 WHERE l.locale = '" + locale + "'"
标签: java hibernate reverse-engineering