Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java持久性API集成Spring Hibernate?_Java_Spring_Hibernate_Jpa - Fatal编程技术网

使用java持久性API集成Spring Hibernate?

使用java持久性API集成Spring Hibernate?,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我正在使用Spring3和Hibernate4。我有下面的配置来使用spring和hibernate <bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="annotatedClasses"

我正在使用Spring3和Hibernate4。我有下面的配置来使用spring和hibernate

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />
pom依赖性 Employee.java 以上配置工作正常,没有任何问题

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />
但是现在我被要求使用HibernateJPA和persistence.xml

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />
你能告诉我推荐哪种方法吗?另外,如何使用Hibernate JPA

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />

谢谢

JPA并不是Hibernate的真正替代品。JPA是ORM(对象关系映射)的通用规范。与Java中的其他子技术一样,一旦许多供应商开始发明类似的东西,Java社区就试图创建一个规范来标准化它。Hibernate的最新版本确实实现了JPA规范(以及EclipseLink/DataNucleus/。来命名其他规范)

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />
在JPA上使用Hibernate的好处是您的代码符合标准。因此,如果以后出于任何原因决定更改ORM供应商,您可以通过最少的代码重构来完成(因为其他供应商也会(应该)遵守标准)

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />

网上有很多关于如何在Spring中使用JPA/Hibernate的教程。当我第一次开始时,一个有用的方法是检查SpringRoo项目——这是一个代码生成器工具,可以构建一个随时可用的SpringMVC/JPA/Hibernate代码项目。从那里您可以检查配置和设置。

Hibernate是JPA的JPA实现。
<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />
因此,只要您坚持JPA标准,并避免特定于hibernate,您就可以了。 首先用JPA等效的EntityManagerFactory替换会话工厂定义

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="emf"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="puName" />
</bean>

如果您将persistence.xml放在/META-INF/下,它应该可以开箱即用。 您的transactionManager也应该进行调整。查看文档

@Enttity已经兼容jpa了

Hibernate是第一个成为市场领导者的ORM框架之一。当Hibernate引入市场时,没有为ORM解决方案定义JPA规范。在看到HibernateAPI的优点之后,Java社区为持久性机制中的所有问题创建了一个通用规范

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />
Hibernate提供了称为Hibernate JPA的JPA实现。不同的是,JPA实现必须符合规范,但供应商解决方案将有自己的API(有时会为您的应用程序提供附加值)。为了将来的利益,总是建议使用标准API,如JPA

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />
如果您正在寻找集成方法,这篇关于的文章可能会有所帮助

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />
你能告诉我推荐哪种方法吗?另外,如何使用Hibernate JPA

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />
因为Hibernate是JPA规范的一个实现,所以如果您想使用它,您应该只关注配置。您不应该在DAO类中直接使用它。在DAO类中,您应该只使用JPA

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />
以下是配置Hibernate的步骤:

1.persistence.xml

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
            <!-- value="create" to build a new database on each run; value="update" to modify an existing database; value="create-drop" means the same as "create" but also drops tables when Hibernate closes; value="validate" makes no changes to the database -->
            <property name="hibernate.hbm2ddl.auto" value="none"/>
            <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.DefaultNamingStrategy"/>
            <property name="hibernate.connection.charSet" value="UTF-8"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.show_sql" value="true"/>
            <!-- Uncomment the following two properties for JBoss only -->
            <!-- property name="hibernate.validator.apply_to_ddl" value="false" /-->
            <!-- property name="hibernate.validator.autoregister_listeners" value="false" /-->
        </properties>
    </persistence-unit>
</persistence>

org.hibernate.jpa.HibernatePersistenceProvider

2.applicationContext.xml

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />
<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
    <property name="driverClassName" value="${database.driverClassName}"/>
    <property name="url" value="${database.url}"/>
    <property name="username" value="${database.username}"/>
    <property name="password" value="${database.password}"/>
    <property name="testOnBorrow" value="true"/>
    <property name="testOnReturn" value="true"/>
    <property name="testWhileIdle" value="true"/>
    <property name="timeBetweenEvictionRunsMillis" value="1800000"/>
    <property name="numTestsPerEvictionRun" value="3"/>
    <property name="minEvictableIdleTimeMillis" value="1800000"/>
    <property name="validationQuery" value="SELECT 1"/>
</bean>
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<tx:annotation-driven mode="aspectj" transaction-manager="transactionManager"/>

<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory">
    <property name="persistenceUnitName" value="persistenceUnit"/>
    <property name="dataSource" ref="dataSource"/>
</bean>


现在在DAO类中:

<bean name="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>com.rsat.Employee</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
            <prop key="hibernate.use_sql_comments">true</prop>
            <prop key="hibernate.jdbc.batch_size">50</prop>
            <!-- Added to mask bean relational constraint validation error -->
            <prop key="javax.persistence.validation.mode">none</prop>
        </props>
    </property>
</bean>

 <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Hibernate Transaction manager for US data source -->
<tx:annotation-driven transaction-manager="transactionManager" />
@Repository
public class OrderDetailsNativeDaoImpl implements OrderDetailsDao {

    @PersistenceContext
    private EntityManager entityManager;

    @SuppressWarnings("unchecked")
    @Override
    public List<OrderDetailsResult> getOrderDetails(int orderId) {
        String queryString = "SELECT dt.id, 1 as version, dt.orderid as orderId, od.orderdate as orderDate, pd.name as productName, dt.unitprice as unitPrice, dt.quantity as quantity"
        + " FROM orders od INNER JOIN orderdetails dt ON od.id = dt.orderid"
        + " INNER JOIN products pd ON dt.productid = pd.id WHERE dt.orderid = :orderId";

        Query query = entityManager.createNativeQuery(queryString, OrderDetailsResult.class);
        query.setParameter("orderId", orderId);

        List<OrderDetailsResult> beanList = query.getResultList();

        return beanList;
    }
}
@存储库
公共类OrderDetailsActivedAOIMPL实现OrderDetailsDao{
@持久上下文
私人实体管理者实体管理者;
@抑制警告(“未选中”)
@凌驾
公共列表getOrderDetails(int orderId){
String queryString=“选择dt.id,1作为版本,dt.orderid作为orderid,od.orderdate作为orderdate,pd.name作为产品名称,dt.unitprice作为单价,dt.quantity作为数量”
+“从订单od内部连接od上的orderdetails dt.id=dt.orderid”
+“dt.productid=pd.id上的内部联接产品pd,其中dt.orderid=:orderid”;
Query Query=entityManager.createNativeQuery(queryString,OrderDetailsResult.class);
setParameter(“orderId”,orderId);
List beanList=query.getResultList();
返回beanList;
}
}

gerrytan,谢谢你的回答。那么,您建议使用EntityManager而不是SessionFactory吗?Sessionfactory是否特定于Hibernate?谢谢正确,如果您查看完整的类名SessionFactory以org.hibernate开头,而所有JPA类都以javax.persistence开头。任何与org.hibernate有关的内容都是特定于hibernate的。我不能提出任何建议,你需要了解利弊并做出决定。有些人坚持使用Hibernate以避免学习其他新东西,而另一些人则坚持使用JPA,以防出现比Hibernate更好的东西,或者他们希望轻松地切换到其他供应商。就我个人而言,我会忍受痛苦,继续学习JPA。无论如何,程序员都必须终身学习。