【发布时间】:2015-09-21 02:08:49
【问题描述】:
我试图从最基本的层面理解通用 DAO。我已经在 DAO Here 中创建了基本的 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;
}
}
【问题讨论】:
-
那个会话类来自休眠?如果是这样,我通常使用这种代码
Session sess = getSession(); IdentifierLoadAccess byId = sess.byId(persistentClass); T entity = (T) byId.load(id); sess.update(entity); sess.delete(entity);
标签: java sql hibernate generics crud