如何使hibernate映射成为一个创建的表?

时间:2014-02-26 14:08:07

标签: java hibernate reverse-engineering

我尝试为已创建的表建模几列。但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无法处理创建的表。

生成模型可能是一个逆向工程,可以提供帮助,但我不知道如何执行此操作。

有没有这个?

3 个答案:

答案 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 + "'";