2015-09-21 235 views
0

我想了解通用DAO的最基本的级别。我得在这里DAO创建基本的CRUD方法:通用DAO休眠Java

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(); 



} 

但是,我无法弄清楚如何获得ID为我传递到ObjectDAOImpl类。这里是执行:

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

是从休眠的Session类吗?如果是这样,我通常使用这种代码'Session sess = getSession(); IdentifierLoadAccess byId = sess.byId(persistentClass); T实体=(T)byId.load(id); sess.update(entity); sess.delete(entity);' – irvana

回答

0

好吧,如果你想找回你刚插入的对象的ID。你实际上可以得到你刚才调用的方法的返回值。

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

您可以查看示例here