通用Hibernate DAO

时间:2011-07-22 02:56:27

标签: java hibernate

如果有人可以提供帮助,请表示赞赏。

我的计划是有两层。一个是服务层,第二个是DAO层。服务层将执行业务逻辑,DAO层将执行CRUD数据操作。

有两个名为Person和Order的休眠实体。这两个实体实现了BaseEntity接口。想在DAO层中编写一个泛型方法,以便它可以占用任何实体。

有关如何编写该泛型dao方法的任何建议吗?

@Entity
@Table(name = "PERSON")
public class Person implements BaseEntity, java.io.Serializable {

private int id;
private String firstName;

public Person() {
}

@Id
@Column(name = "PERSON_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

@Column(name = "FIRST_NAME", nullable = false, length = 50)
public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}
}

@Entity
@Table(name = "PURCHASE_ORDER")
public class Order implements BaseEntity java.io.Serializable {

private int id;

public Order() {
}

@Id
@Column(name = "ORDER_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

@Transient
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
public Set<OrderItem> getOrderItems() {
    return orderItems;
}

public void setOrderItems(Set<OrderItem> orderItems) {
    this.orderItems = orderItems;
}
}

您能否建议如何创建一个泛型方法,该方法应该将Person或Order实体作为输入参数?

3 个答案:

答案 0 :(得分:6)

答案 1 :(得分:0)

让Person和Order子类为基础DAO,有方法在DAO中。

答案 2 :(得分:0)

这是编写泛型fetch方法的方法:

 public <T> T get(long id,Class<T> clazz) throws Exception{

            Session session = null;
            T t=null;
            try
            {
                session=getSessionFactory().openSession();
                t= (T) session.get(clazz.getCanonicalName(),id);
            }
            catch(Exception e)
            {
                throw e;
            }
                    finally{
                          if(session!=null) session.close();
                    }
            return t;
        }

忽略异常处理。使用您自己的异常处理技术。