通用DAO Hibernate Java

时间:2015-09-21 02:08:50

标签: java sql hibernate generics crud

我正在尝试将Generic DAO理解为最基本的级别。我已经在DAO中创建了基本的CRUD方法:

public interface ObjectDAO <T>{

boolean insert(T t);

boolean update(int id, T t);



boolean delete(int id);

T retrieveByID(int id);

List<T> retrieveAll();



}

但是,我无法弄清楚如何获取我传递给ObjectDAOImpl的类的id。以下是实施:

public class ImplObjectDAO<T> implements ObjectDAO<T>{

Session session;

public ImplObjectDAO() {

    session= SessionSingleton.getInstance();
}

@Override
public boolean insert(T t){

        try{

        session.beginTransaction();

        session.save(t);

        session.getTransaction().commit();

        }
        catch(HibernateException he){

            he.printStackTrace();
            return false;
    }   
    return true;
}


@Override
public boolean update(int id, T t) {

    try{

        session.beginTransaction();




        session.update(t);

        session.getTransaction().commit();

        return true;
        }
        catch(HibernateException he){
            he.printStackTrace();
            return false;
        }
        catch(NullPointerException np){
            np.printStackTrace();
            return false;
        }
}


public boolean delete(int id){



    return true;

}

@Override
public <T> retrieveByID(int id){

    return T;
}

@Override
public List<T> retrieveAll(){
    return new ArrayList<T>(objectSet);

}


}

所以,如果我传递一个像我创建的员工类那样的对象。插入方法工作正常。但是一旦它被插入到数据库中,我如何获取实体的id以便我可以执行更新,删除或检索等操作?我不理解。任何帮助表示赞赏。

这是实体类:

@Entity
@Table(name="Employee_Records")
public class Employee {

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
private int eID;

@Column(name="EMP_NAME", length=20)
private String empName;

@Column(name="EMPLOYEE_AGE")
private int empAge;

public Employee(){
    eID= 0;
    empName="temp";
    empAge=0;
}

public Employee(int eID, String empName, int empAge) {
    this.eID = eID;
    this.empName = empName;
    this.empAge = empAge;
}

public int geteID() {
    return eID;
}

public void seteID(int eID) {
    this.eID = eID;
}

public String getEmpName() {
    return empName;
}

public void setEmpName(String empName) {
    this.empName = empName;
}

public int getEmpAge() {
    return empAge;
}

public void setEmpAge(int empAge) {
    this.empAge = empAge;
}



@Override
public String toString() {
    return "Employee ID=" + eID + ", Employee Name=" + empName + ", Employee    Age="
            + empAge;
}
}

1 个答案:

答案 0 :(得分:0)

好吧,如果你想检索你刚刚插入的对象的id。实际上,您可以获得刚刚调用的save方法的返回值。

因此,在示例代码中,当您save对象时,不是返回true,而是可以返回对象的id。

您可以查看示例here