Hibernate 方法返回一个列表,以从包含内部联接的查询填充DataTable
我在Eclipse中使用primefaces组件和Hibernate的数据持久性创建了一个JSF项目。在这个项目中,对于每个模型类,至少有两个视图(xhtml页面),一个DAO类和一个控制器类。在DAO中,有以下方法返回用于填充数据表的对象列表。下面是我用来填充数据表的DAO和xhtml页面的片段 textobaseado.javaHibernate 方法返回一个列表,以从包含内部联接的查询填充DataTable,hibernate,jpa,jsf-2,primefaces,datatable,Hibernate,Jpa,Jsf 2,Primefaces,Datatable,我在Eclipse中使用primefaces组件和Hibernate的数据持久性创建了一个JSF项目。在这个项目中,对于每个模型类,至少有两个视图(xhtml页面),一个DAO类和一个控制器类。在DAO中,有以下方法返回用于填充数据表的对象列表。下面是我用来填充数据表的DAO和xhtml页面的片段 textobaseado.java public List<Textobase> listar() { List<Textobase> listTexto
public List<Textobase> listar()
{
List<Textobase> listTextobase = null;
String query = "SELECT * FROM tbl_textobase inner join tbl_disciplina on tbl_textobase.disciplina_textobase = tbl_disciplina.id_disciplina";
try
{
this.manager.getTransaction().begin();
listTextobase = this.manager.createNativeQuery(query, new Textobase().getClass()).getResultList();
this.manager.getTransaction().commit();
}
catch(Exception ex)
{
listTextobase = null;
this.manager.getTransaction().rollback();
}
return listTextobase;
}
但是,当我返回一个Textobase列表时,外部表的字段不会在这个列表中返回。所以我的问题是:
我应该在“listar()”方法和我的DataTable中进行哪些更改,以返回一个包含外部表字段的列表,并且可以正确填充DataTable
非常感谢。有几件事
listTextobase = this.manager.createNativeQuery(query,
new Textobase().getClass()).getResultList();
将映射到Textobase类。。。因此,最简单的解决方案是向类添加几个瞬态属性,并用@transient:ie注释:
private String attribute;
...
@Transient
public String getAttribute(){
return this.attribute;
}
...
下一步,您可能要执行以下操作:
List<Object[]> list = (List<Object[]>)entityManager
.createNativeQuery(query).getResultList();
List List=(List)entityManager
.createNativeQuery(query.getResultList();
因此,您可以迭代对象[]列表。接下来,Textobase类应该有一个n参数构造函数,其中所有参数都是Object.class的实例,包括瞬态属性。然后你可以做如下的事情:
List<TextoBase> result = new ArrayList<TextoBase>();
for (Object[] o : list){
TextoBase row = new TextoBase(o[0],o[1],o[2],...);
result.add(aux);
}
List result=new ArrayList();
对于(对象[]o:list){
TextoBase行=新的TextoBase(o[0],o[1],o[2],…);
结果.添加(aux);
}
希望这有帮助。苏尔特
private String attribute;
...
@Transient
public String getAttribute(){
return this.attribute;
}
...
List<Object[]> list = (List<Object[]>)entityManager
.createNativeQuery(query).getResultList();
List<TextoBase> result = new ArrayList<TextoBase>();
for (Object[] o : list){
TextoBase row = new TextoBase(o[0],o[1],o[2],...);
result.add(aux);
}