我尝试为已创建的表建模几列。但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;
当我使用正确的参数调用此方法时,不会返回任何内容,但映射的表包含可以使用这些参数获取的数据。
我不知道为什么hibernate无法处理创建的表。
生成模型可能是一个逆向工程,可以提供帮助,但我不知道如何执行此操作。
有没有这个?
答案 0 :(得分:1)
您正在使用同名,但新变量为try / catch块中的List结果着色,并为其分配查询结果。但是你总是返回赋值为null的外部变量。
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;
可能会做得更好
答案 1 :(得分:0)
您应该使用查询功能来指定参数,因为这可能是问题所在。 试试这样的事情
String q = "SELECT l.name FROM yourclassname l WHERE l.locale=:locale";
List<Location> result = null;
try {
Transaction tx = getSession().beginTransaction();
session=yourFactory.openSession();
query=session.createQuery(q);
query.setParameter("locale",yourLocaleVal);
result=query.list();
tx.commit();
} catch (Exception ex) {
ex.printStackTrace();
}
return result;
答案 2 :(得分:0)
执行搜索的最佳方法是使用SELECT中的构造函数表达式,请参阅下面的内容:
String q = "Select new " + className + "(l.ID, l.title, l.locale) From " + className + " l Where l.locale = '" + locale + "'";