Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Hibernate 5.2使用

Hibernate 5.2使用
EN

Stack Overflow用户
提问于 2018-04-11 11:57:34
回答 2查看 132关注 0票数 0

在Java方面,似乎有几种不同的使用Hibernate的方法,很难找到哪种方法符合最佳实践和/或最新的方法。我不喜欢直接使用实际的SQL语句,而是更愿意使用下面的方法,但是如果下面的代码不是最佳实践方法,那么我愿意使用下面的方法。

所以:

  1. 从5.2开始,按照下面的代码样式,当前的方法是什么?我想我已经看到了EntityManager代替了Session,是其中一种比另一种更流行,还是它们都可以继续前进?
  2. 与实际SQL语句相比,下面的方法更可取吗?

我意识到这可能不是最好的措辞,所以如果需要澄清,请告诉我。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public List findAllRoles() {
    try (Session session = getSessionFactory().openSession()) {
        session.beginTransaction();
        CriteriaBuilder builder = session.getCriteriaBuilder();
        CriteriaQuery<AuthRole> criteria = builder.createQuery(AuthRole.class);
        Root<AuthRole> root = criteria.from(AuthRole.class);
        criteria.select(root);
        List<AuthRole> roleList = session.createQuery(criteria).getResultList();
        session.getTransaction().commit();

        return roleList;
    }
}

会议来自:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    private static final SessionFactory SESSION_FACTORY = buildSessionFactory();

private static SessionFactory buildSessionFactory() {
    final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();
    try {
        return new MetadataSources(registry).buildMetadata().buildSessionFactory();
    } catch (Exception e) {
        StandardServiceRegistryBuilder.destroy(registry);
        LOG.error(e, e);
        return null;
    }
}
EN

回答 2

Stack Overflow用户

发布于 2018-04-11 12:09:51

这两者都是可以接受的,参见Guide.html (官方指南),它从一个很好的概述开始。EntityManager是JPA接口,会话是本机接口。JPA是可移植的,所以如果使用它,您可以选择从Hibernate切换到另一个实现,而无需更改代码。为了以防万一,我会在新代码中这样做。带有会话的本机API可以提供JPA中没有的Hibernate特定特性,而且如果您正在使用为Hibernate构建的现有代码,那么它是很好的。

至于标准与SQL或HQL (或带有JPA的JPA),您可能需要全部。就我个人而言,我发现HQL比标准更强大、更容易阅读。两者都具有不直接绑定到数据库的优点,因此在可能的情况下使用标准或HQL代替SQL。但是,在某些情况下,您可能需要SQL以获得更好的性能。实用主义者获胜。

票数 0
EN

Stack Overflow用户

发布于 2018-04-11 12:12:48

我想我已经看到了使用EntityManager而不是会话,其中一个比另一个更流行,还是它们都可以继续前进?

EntityManager是标准的JPA。对于专有的API,没有什么是您不能用标准API做的。如果确实需要,您可以从SessionFactory或EntityManager中获得一个EntityManager或会话。因此,应该首选标准API。它具有较少的遗留负担,并且可以跨JPA实现进行移植。

与实际SQL语句相比,下面的方法更可取吗?

使用JPA查询数据库有三种标准方法: JPQL、条件API和SQL。

一般而言,应优先考虑JPQL (IMHO)。标准API的可读性和简单性要高得多。它比SQL更简洁,并且使用逻辑实体模型,而不是物理底层关系模型。

当JPQL不够强大时,SQL有时是必要的。

标准API是不直观的,它产生的代码很难阅读和理解。当您需要动态地生成查询时,应该限制它的使用,根据各种.标准(因此得名)。

请注意,还有其他一些非标准的方法来生成动态查询(如QueryDSL),并且也可以通过使用spring存储库(以及spring或CDI来简化事务管理)来避免许多查询和样板代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49783520

复制
相关文章
Apache、tomcat、Jboss、weblogic、WebSphere区别和容器的作用
总结:Apache/Tomcat/JBOSS/Nginx区别 . 1、Apache是Web服务器,Tomcat是应用(Java)服务器。Tomcat在中小型系统和并发访问用户不是很多的场合下被普遍使用。Apache支持静态页,Tomcat支持动态的。 2、Jetty:Tomcat内核作为其Servlet容器引擎,并加以审核和调优.大中型系统可以应用。能够提供数据库连接池服务,还支持其他 Web 技术的集成,譬如PHP、.NET 两大阵营. 3、JBoss是一个管理EJB的容器和服务器,但JBoss核心
小小科
2018/05/02
3.7K0
Exploiting Jolokia Agent with Java EE Servers
0x00 - About Jolokia Jolokia 是一个通过 HTTP 的 JMX 连接器,提供了类 RESTful 的操作方式,可以通过 POST JSON 的方式访问和修改 JMX 属性、执行 JMX 操作、搜索 MBean、列出 MBean 的 Meta-data 等。 Jolokia 支持提供了多种 Agents,包括 WAR Agent、OSGi Agent、JVM Agent 或者 Mule Agent。其中 WAR Agent 支持了多种 Web Server: JBoss 4.
云鼎实验室
2018/04/02
1.7K0
Exploiting Jolokia Agent with Java EE Servers
flowable camunda activiti 功能对比
flowable camunda activiti 三个框架都是从jbpm框架诞生出来的,先是有jbpm4,然后出来了一个activiti5,activiti5发展一段时间,又出来了一个Camunda。activiti5发展了4年,紧接着出来了一个flowable。本文重点对flowable camunda两个框架的功能对比。对比的camunda版本是7.10.0,flowable框架的版本是6.4.1.
全栈程序员站长
2022/08/31
8.3K1
flowable camunda activiti 功能对比
Migrating to WebSphere 9
Migrating to WebSphere 9 Make a migration plan Requirements Migrate WebSphere profiles into the new WebSphere Keep profiles' locations as the original path Prepare Install the new WebSphere Setup variables At first, we need to record variables related to
绿巨人
2018/05/16
9480
在eclipse中使用Tomcat8.5时,出现了如下错误:
在建立Tomcat服务时,eclipse会自动生成一个Servers的项目. 在这个项目中,找到你部署项目的服务文件夹. 在这个文件夹下有一个"server.xml"文件,打开这个文件,删除里面对应项目的Context节点即可。
兮动人
2021/06/11
3.7K0
在eclipse中使用Tomcat8.5时,出现了如下错误:
Tomcat原理剖析-tomcat介绍和源码idea构建
Tomcat 服务器是一个开源的轻量级Web应用服务器,在中小型系统和并发量小的场合下被普遍使用,是开发和调试Servlet、JSP 程序的首选。
程序猿川子
2022/08/10
7880
8.5 DebuggerPresent
CheckRemoteDebuggerPresent 也是一个微软提供的反调试函数,该函数可以在本地或者远程进程中使用。函数接收两个参数进程句柄和一个指向布尔值的指针。如果指定的进程正在被调试,则函数会把指向布尔值的指针设为 TRUE,否则设为FALSE。
微软技术分享
2023/09/27
1610
8.5 DebuggerPresent
【JAVA调错】----JBoss发布多个项目时抛出webAppRootKey错误
进行如上配置后,修改log4j.xml后,在刷新间隔时间后,配置的监听器Log4jConfigListener会重新加载log4j相关配置。
令仔很忙
2018/09/14
1.1K0
迁移Hexo到halo
此前,我使用hexo,犹豫hexo是静态的,有所不便。无意之中发现这款博客框架。此博客使用java所以,内存需求比较高。优点是美观,支持批量导入md。
Innei
2021/12/28
1.2K0
8.5 DebuggerPresent
CheckRemoteDebuggerPresent 也是一个微软提供的反调试函数,该函数可以在本地或者远程进程中使用。函数接收两个参数进程句柄和一个指向布尔值的指针。如果指定的进程正在被调试,则函数会把指向布尔值的指针设为 TRUE,否则设为FALSE。
微软技术分享
2023/10/11
1290
迁移 VPS 到 Vultr
趁着中秋节之前总算是把我的 VPS 迁移到了 Vultr,域名也换了一个 .me 结尾的,更有个人网站的感觉,但是一年下来也得多花不少钱,疼死我了。
kifuan
2022/10/24
18.7K0
迁移 VPS 到 Vultr
迁移 Nginx 到 Envoy
大部分的应用可能还是使用的比较传统的 Nginx 来做服务代理,本文我们将介绍如何将 Nginx 的配置迁移到 Envoy 上来。我们将学到:
我是阳明
2020/06/15
1.3K0
迁移 Nginx 到 Envoy
Linux下Jboss安装使用+Jboss部署脚本「建议收藏」
Jboss是Java EE应用服务器(就像Apache是web服务器一样),专门用来运行Java EE程序的。
全栈程序员站长
2022/09/27
4.9K0
Linux下Jboss安装使用+Jboss部署脚本「建议收藏」
Jboss安装
 1、下载http://pan.baidu.com/s/1bnmYN7p,解压jboss-as-7.1.1.Final.zip即完成安装
week
2018/08/27
1.3K0
8.5 存储紧缩
1、在整个动态存储管理过程中,不管哪个时刻,可利用空间都是一个地址连续的存储区,在编译程序中称之为“堆”,每次分配都是从这个可利用空间中划出一块。
小林C语言
2020/12/12
3980
8.5 存储紧缩
IBM WebSphere MQ 系列(三)配置和使用WebSphere MQ
配置和使用WebSphere MQ A.设置环境变量   在shell中执行MQ的控制命令:     ctrmqm     strmqm   若识别这些命令,则说明PATH环境变量已配置好了;   若提示找不到命令,则说明需配置Linux环境变量,指定MQ的bin路径到PATH:      可选择修改系统的环境变量(/etc/profile文件,对全部用户可见),      或只修改用户mqadmin的环境变量(/var/mqm/.bash_profile,只对当前用户可见。     下面列出前者的修改方式
Java学习123
2018/05/16
6.4K0
JBoss 主要模块
本文介绍了JBoss的主要模块,包括JBoss EJB容器、JBossNS、JBossTX、部署服务、JBossMQ、JBossSX和JBossCX。JBoss EJB容器是JBoss服务器的核心实现,支持热部署。JBossNS提供命名服务,用于定位对象和资源。JBossTX支持JTA/JTS和交易管理。部署服务支持EJB、Web应用和企业级应用的部署。JBossMQ是Java消息服务规范实现。JBossSX支持安全实现,包括基于JAAS的或不支持JAAS机制的安全。JBossCX实现了部分JCA功能。Web服务器支持Web容器和Servlet引擎。
YGingko
2017/12/28
1.5K0
eclipse + JBoss 5 +
有时客户端程序(如JSP、Servlet)会和EJB组件运行在同一个JVM上,如在同一个J2EE服务器(JBoss、Weblogic等)中运行。这时就没必要 再通过远程(remote)接口访问Session Bean了,因为客户端和session bean都在同一个jvm上,只需要通过本地接口(local)访问即可。就象直接访问本地类一样(当然,不能直接访问EJB类,需要使用jndi和local接口来获得本地接口对象。当然,也可以通过remote接口来访问ejb,不过这样会有一些性能损失。就象在同一台机器上还通过socket进行访问一样,很多性能都损耗在网络上了。下面我们来举个简单的例子来看一下如何使用本地接口来访问session bean。     先建立一个session bean本地接口,代码如下:
py3study
2020/01/14
6700
jboss下载和安装[通俗易懂]
1. 下载 http://www.jboss.org/jbossas/downloads/ 选择Certified Java EE 6 Full Profile版本,我下载的是 jboss-as-7.1.1.Final.zip。 2. 解压 jboss-as-7.1.1.Final.zip 注意整个路径必须没有空格才行。 3. 配置环境变量 JRE 环境变量 JAVA_HOME JRE的路径 CLASSPATH %JAVA_HOME%\lib PATH %JAVA_HOME%\bin
全栈程序员站长
2022/09/28
2.5K0
jboss下载和安装[通俗易懂]
点击加载更多

相似问题

Websphere到Jboss的迁移

12

WebLogic8.1到Websphere 8.5迁移

14

IBM websphere到JBOSS的迁移

24

WebSphere8.5应用程序到IBM迁移上的Websphere自由

10

从Tomcat6.0迁移到WebSphere 8.5

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文