我学习了Hibernate并用它来在很大程度上减少我的Java代码 减少DB的时间。现在我应该使用什么类型的查询来完成我的 获取要显示,更新和删除的数据库列表的操作。
我的删除代码是
String newToken = "DELETEUSER";
if(!TokenManager.checkRoleToken(newToken)){
return;
}
Session session = Main.getSession(); //calling the main method to get sesion
Leavetable table = new Leavetable; // intialisation of object table
try{
Transaction tr = session.beginTransaction();
table = session.createQuery();
session.delete(table); // deletion of the object and its properties from selected leaveID
tr.commit();
}
finally{
session.close();
}
我的Db更新代码
public void updateLeaveTable( Leavetable leave ) {
String newToken = "ADDUSER";
if( !TokenManager.checkRoleToken( newToken ) ) {
return;
}
Session session = Main.getSession(); // calling the main method to get
// session
try {
session = Main.getSession();
Transaction tr = session.beginTransaction();
session.saveOrUpdate( leave ); // here without query the table gets
// updated How?
tr.commit();
}
finally {
session.close();
}
}
我应该遵循什么类型的查询。进入项目之前我的最后一项任务。当我 知道这将开始我作为开发人员的生活。任何建议请。
答案 0 :(得分:3)
您的意思是HQL查询吗?好吧,Leavetable
实体上的典型查询如下所示:
Query q = session.createQuery("from Leavetable t where t.someField = :value");
q.setParameter("value", foo);
List<Leavetable> results = q.list();
但是,如果您只想按标识符检索实体,请参阅Session#load()
或Session#get()
。我不想让事情太混乱,但两种方法都相似,但两者之间存在重要差异。引用Hibernate Forums:
按标识符
检索对象以下Hibernate代码段 从中检索用户对象 数据库:
User user = (User) session.get(User.class, userID);
get()
方法很特别,因为 标识符唯一标识一个 一个类的单个实例。因此,它 常见的应用程序使用 标识符作为一个方便的句柄 持久对象。检索 标识符可以在何时使用缓存 检索一个对象,避免一个 如果对象已经存在,则命中数据库 缓存。 Hibernate还提供了一个load()
方法:User user = (User) session.load(User.class, userID);
load()方法较旧; get()是 由于用户而添加到Hibernate的API 请求。差别很小:
如果
load()
无法找到该对象 缓存或数据库,一个例外 抛出。 load()方法永远不会 返回null。get()
方法 如果对象不能返回null
找到。
load()
方法可能会返回代理 而不是一个真正的持久化实例。 代理是触发的占位符 加载真实对象的时候 这是第一次访问;我们 在本节后面讨论代理。 另一方面,get()
从未 返回代理。在
get()
和load()
之间进行选择 很容易:如果你确定的话 持久对象存在,和 不会考虑不存在 例外,load()
是一件好事 选项。如果你不确定有 具有给定的持久化实例 标识符,使用get()
并测试 返回值以查看它是否为null。 使用load()
还有一个问题 含义:申请可以 检索有效的引用(代理) 到没有的持久化实例 点击数据库来检索它 持久的状态。所以load()
可能 如果没有,则不抛出异常 找到中的持久对象 缓存或数据库;例外 在代理人的时候被抛出 访问。当然,通过检索对象 标识符不如使用灵活 任意查询。
另请参阅Hibernate文档(下面的链接)。