我有一个用hibernate 4管理的posgresql数据库,我想知道是否有办法生成来自数据库内容的java对象实体。
如果我有一个hibernate对象测试:
Test (
int id,
String aString,
String anotherString
)
在我测试的数据库中:
ID,AString,AnotherString
1,uuuu,iiii
2,vvvv,xxxx
我正在寻找一种生成如下结果的方法:
Test test1 = new Test(1,"uuuu","iiii");
Test test2 = new Test(2,"vvvv","xxxx");
答案 0 :(得分:0)
是的,这可以使用hql,
为此你需要做的是
1)在Test Class中创建一个构造函数
public Test(int id, String aString, String anotherString ){
this.id=id;
this.aString=aString;
this.anotherString =anotherString ;
}
2)使用hql write获取数据时: 从EntityName entityAlias中选择新的Test(entityAlias.id,entityAlias.aString,entityAlias.anotherString);
在内省的情况下 1)创建一个构造函数,其中参数的顺序是在我们的类中写入的od字段。
2)使用反射手动准备查询。
我已经编写了一个用于查询创建的测试程序,请参阅以下内容: -
public static void main(String[] args) {
Class<Test> aClass = Test.class;
Field[] fieldArray = null;
String alias ="test";
int length=0;
try {
fieldArray = aClass.getFields();
length= fieldArray.length;
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
StringBuilder s=new StringBuilder("select new Test(");
for(int index=0; index<length ;index++){
s.append(alias+ "." +fieldArray[index].getName() );
if( index != length -1){
s.append(" , ");
}
else{
s.append(" ) ");
}
}
s.append(" FROM Test " + alias);
System.out.println(s);
}
输出: 选择新的Test(test.id,test.aString,test.anotherString)FROM Test test