Java 我应该在Hibernate中使用什么查询来获取POJO?
我学习了Hibernate,并使用它在很大程度上减少了我的Java代码,并且能够 以减少用于DB的时间。现在,我应该使用什么类型的查询来完成我的 获取要显示的数据库列表、更新和删除的操作 我的删除代码是Java 我应该在Hibernate中使用什么查询来获取POJO?,java,hibernate,orm,session,jpa,Java,Hibernate,Orm,Session,Jpa,我学习了Hibernate,并使用它在很大程度上减少了我的Java代码,并且能够 以减少用于DB的时间。现在,我应该使用什么类型的查询来完成我的 获取要显示的数据库列表、更新和删除的操作 我的删除代码是 String newToken = "DELETEUSER"; if(!TokenManager.checkRoleToken(newToken)){ return; } Session session = Main.getSession(); //calling the main me
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();
}
我的数据库更新代码
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();
}
}
我应该遵循什么类型的查询。我进入项目前的最后一项任务。当我
我知道这将开始我作为开发人员的生活。请提供任何建议。您是指HQL查询吗?嗯,对
Leavetable
实体的典型查询如下所示:
Query q = session.createQuery("from Leavetable t where t.someField = :value");
q.setParameter("value", foo);
List<Leavetable> results = q.list();
get()
方法很特殊,因为
标识符唯一地标识一个对象
类的单个实例。因此它是
应用程序使用
标识符,作为
持久对象。检索
标识符可以在以下情况下使用缓存:
检索对象,避免
如果对象已被删除,则数据库命中
缓存。Hibernate还提供了
load()
方法:
User user = (User) session.load(User.class, userID);
load()方法较旧;get()是
由于用户原因添加到Hibernate的API
要求差别很小:
如果load()
在中找不到对象
缓存或数据库中存在异常
扔。load()方法从不
返回null。get()
方法
如果无法创建对象,则返回null
找到了
load()
方法可能返回代理
而不是真正的持久实例。
代理是一个可触发的占位符
加载真实对象时
它是第一次被访问;我们
在本节后面讨论代理。
另一方面,get()
never
返回一个代理
在get()
和load()
很简单:如果您确定
持久对象存在,并且
不存在将被视为不存在
例外情况下,load()
是一个很好的选择
选项如果你不确定是否有
具有给定
标识符,使用get()
并测试
返回值以查看它是否为null。
使用load()
暗示:申请可能
检索有效引用(代理)
在没有
点击数据库以检索其
持续状态。因此,load()
可能
不抛出异常时不抛出异常
在中查找持久对象
缓存或数据库;例外情况是
稍后,当代理被调用时抛出
访问
当然,通过
标识符没有使用标识符灵活
任意查询
另请参见Hibernate文档(下面的链接)
参考文献
- Hibernate核心参考指南
您是指HQL查询吗?嗯,对
Leavetable
实体的典型查询如下所示:
Query q = session.createQuery("from Leavetable t where t.someField = :value");
q.setParameter("value", foo);
List<Leavetable> results = q.list();
get()
方法很特殊,因为
标识符唯一地标识一个对象
类的单个实例。因此它是
应用程序使用
标识符,作为
持久对象。检索
标识符可以在以下情况下使用缓存:
检索对象,避免
如果对象已被删除,则数据库命中
缓存。Hibernate还提供了
load()
方法:
User user = (User) session.load(User.class, userID);
load()方法较旧;get()是
由于用户原因添加到Hibernate的API
要求差别很小:
如果load()
在中找不到对象
缓存或数据库中存在异常
扔。load()方法从不
返回null。get()
方法
如果无法创建对象,则返回null
找到了
load()
方法可能返回代理
而不是真正的持久实例。
代理是一个可触发的占位符
加载真实对象时
它是第一次被访问;我们
在本节后面讨论代理。
另一方面,get()
never
返回一个代理
在get()
和load()
很简单:如果您确定
持久对象存在,并且
不存在将被视为不存在
例外情况下,load()
是一个很好的选择
选项如果你不确定是否有
具有给定
标识符,使用get()
并测试
返回值以查看它是否为null。
使用load()
暗示:申请可能
检索有效引用(代理)
在没有
点击数据库以检索其
持续状态。因此,load()
可能
不抛出异常时不抛出异常
在中查找持久对象
缓存或数据库;例外情况是
稍后,当代理被调用时抛出
访问
当然,通过
标识符没有使用标识符灵活
任意查询
另请参见Hibernate文档(下面的链接)
参考文献
- Hibernate核心参考指南
@pascal非常感谢,我可以像下面这样编写Hql查询q=session.createQuery(“from leave table t,其中t.leaveID=:id”);q、 setParameter(“id”,…);那个foo表示什么hear@pascal对于更新,我不需要一个查询,hibernate为我做。会话。保存或更新(离开)。我是吗right@Code那个foo只是一个随机的例子,因为我不知道Leavetable是什么样子:),但我添加了更多关于通过标识符检索对象的方法的细节,因为我现在知道这可能是您最初的意图(与“泛型”查询相比).@非常感谢您让我了解这两个方法及其差异。@是的,我找到了,foo是通过我的方法传递的id值。@pascal非常感谢,我可以像这样编写Hql查询吗=