发布网友 发布时间:2022-05-01 02:39
共3个回答
懂视网 时间:2022-05-01 07:01
com.hfview.bean; import java.util.ArrayList; import java.util.List; public class PersonEx { private String id; private String name; private String birthday; private String area; private List<Menu> menu = new ArrayList<Menu>(); public PersonEx(){ } public PersonEx(String name, String area) { super(); this.name = name; this.area = area; } public PersonEx(String id, String name, String birthday) { super(); this.id = id; this.name = name; this.birthday = birthday; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } public List<Menu> getMenu() { return menu; } public void setMenu(List<Menu> menu) { this.menu = menu; } public String getArea() { return area; } public void setArea(String area) { this.area = area; } }实体Person1
package com.hfview.bean;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Table(name = "t_person",schema="zhw")
@Entity
public class Person1 {
private String id;
private String name;
private String sex;
private Card card;
@Id
@Column(name="ID")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column(name="NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name="SEX",columnDefinition="varchar2(8)")
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@OneToOne
@JoinColumn(name="CARDID")
public Card getCard() {
return card;
}
public void setCard(Card card) {
this.card = card;
}
}
实体Card
package com.hfview.bean;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Table(name = "t_card",schema="zhw")
@Entity
public class Card {
private String id;
private String cardId;
private String area;
@Id
@Column(name="ID")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column(name="CARDID")
public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
@Column(name="AREA")
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
}
Person1和card是一对一关系,PersonEx是这两个扩展对象
public List<PersonEx> getListPersonEx1(){
String hql=" select new com.hfview.bean.PersonEx(a.name,b.area) from Person1 a left join a.card b ";
return getHt().find(hql);
}
这样就动态的取到了PersonEx的集合。
这里需要注意几点
1、PersonEx里面一定要有对应的构造方法,并且sql里面参数顺序和构造器里面的顺序一致
2、PersonEx可以是没有映射关系的,也可以是实体
类 Person2
package com.hfview.bean;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Table(name = "t_person", schema = "zhw")
@Entity
public class Person2 {
private String id;
private int age;
private Date birthday;
private List<Menu> menu = new ArrayList<Menu>();
@Id
@Column(name="ID")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column(name="AGE")
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Column(name="BIRTHDAY")
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@OneToMany
@JoinColumn(name="PERSONID")
public List<Menu> getMenu() {
return menu;
}
public void setMenu(List<Menu> menu) {
this.menu = menu;
}
}
Dao层方法
public List<PersonEx> getListPersonEx2(){
String sql="select a.id as "id",a.name as "name",to_char(a.birthday,‘yyyy-mm-dd‘) as "birthday" " +
"from t_person a ";
return getForListBean(sql, PersonEx.class);
}
getForListBean方法
public <T> List<T> getForListBean(final String sql,final Map<String,Object> paras,final int page,final int rows,final Class<T> clazz){
return ht.executeFind(new HibernateCallback<List<HashMap<String,Object>>>() {
public List<HashMap<String, Object>> doInHibernate(
Session session) throws HibernateException, SQLException {
SQLQuery query = session.createSQLQuery(sql);
if(paras!=null){
for (String key :paras.keySet()) {
query.setParameter(key, paras.get(key));
}
}
if(page!=0&&rows!=0){
int start = page*rows-rows+1;
query.setFirstResult(start).setMaxResults(rows);
}
query.setResultTransformer(Transformers.aliasToBean(clazz));
return query.list();
}
});
}
这里需要注意的几点
1、构造函数一定要和sql里面的对应
2、oracle中默认把字段都转成大写,这样set方法就会出错,所以要转变成 as “aa” 这种
3、对于PersonEx如果有集合,怎么动态的设置进去,目前我还没找到方法
Hibernate的HQL和原生SQL返回简单对象
标签:
热心网友 时间:2022-05-01 04:09
1、你使用Hibernate的get和load方法可以查询出单个对象。热心网友 时间:2022-05-01 05:27
你自己封装返回类型啊。追问不是用query的方法直接就能返回一个对象了吗