有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java通用Hibernate DAO

如果有人能帮忙,我将不胜感激

我的计划是有两层。一个是服务层,第二个是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实体作为输入参数


共 (2) 个答案

  1. # 1 楼答案

    下面是编写通用获取方法的方法:

     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;
            }
    

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

  2. # 2 楼答案

    让Person和Order子类化一个基本的DAO,让方法接受DAO