Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通用Hibernate-DAO_Java_Hibernate - Fatal编程技术网

Java 通用Hibernate-DAO

Java 通用Hibernate-DAO,java,hibernate,Java,Hibernate,如果有人能帮忙,我将不胜感激 我的计划是有两层。一个是服务层,第二个是DAO层。服务层将执行业务逻辑,DAO层将执行CRUD数据操作 有两个名为Person和Order的hibernate实体。这两个实体实现了BaseEntity接口。希望在DAO层中编写一个泛型方法,以便它可以接受任何实体 关于如何编写通用dao方法,有什么建议吗 @Entity @Table(name = "PERSON") public class Person implements BaseEntity, java.io

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

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

有两个名为Person和Order的hibernate实体。这两个实体实现了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;
}
}

@实体
@表(name=“采购订单”)
公共类顺序实现BaseEntity java.io.Serializable{
私有int-id;
公共秩序(){
}
@身份证
@列(name=“ORDER\u ID”)
@GeneratedValue(策略=GenerationType.AUTO)
公共int getId(){
返回id;
}
公共无效集合id(内部id){
this.id=id;
}
@短暂的
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
公共集getOrderItems(){
退货订单项目;
}
公共无效setOrderItems(集合orderItems){
this.orderItems=orderItems;
}
}

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

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

以下是编写泛型获取方法的方法:

 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;
        }
public T get(长id,类clazz)引发异常{
会话=空;
T=零;
尝试
{
会话=getSessionFactory().openSession();
t=(t)session.get(clazz.getCanonicalName(),id);
}
捕获(例外e)
{
投掷e;
}
最后{
if(session!=null)session.close();
}
返回t;
}

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

谢谢您的帮助。但是它不明白。让我在这里给出我的代码,这样你们可以进一步建议。我读的对吗?你们建议实体对象扩展DAO?+1篇不错的文章。救了我不得不带出代码来演示Hibernate团队还写了一篇关于通用DAOS的文章,以及一些谷歌代码上托管的CARTOM解决方案,现在我们使用Gochev Naiden的方法来解决我们可能会考虑推广主键类型的项目,正如@Nathan Hughes在你的回答前2小时的回答中提到的文章中所建议的那样。是的。。我应该那样做。。以容纳复合键。。这就像一场噩梦。。废话。。该死的可扩展接口!
 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;
        }