标签: spring-orm

Spring DAO vs Spring ORM vs Spring JDBC

我正在浏览Spring支持的数据访问技术,我注意到它提到了多个选项,我不确定它们之间的区别:

据我所知,Spring JDBC提供了模板,用于减少用于通过简单的旧方式访问数据库的样板代码 - 您编写自己的SQL查询.

Spring-ORM提供了通过ORM技术访问数据库的简化模板,如Hibernate,My(i)Batis等.

Spring-DAO按照Spring的网站:

Spring中的数据访问对象(DAO)支持旨在使您能够以一致的方式轻松使用JDBC,Hibernate或JDO等数据访问技术

我对ORM与JDBC有一点关系,因为它们针对的是访问数据库的不同方式.但Spring-DAO简直令人困惑!

有谁能请澄清这三者之间究竟有什么不同?哪种情况应该首选?

此外,还有另一个项目Spring-DATA可用(http://projects.spring.io/spring-data/)现在,它是否是Spring支持的所有数据访问技术的父项目,或者它只是Spring的新名称-dao?

spring spring-jdbc spring-orm spring-data

96
推荐指数
1
解决办法
7万
查看次数

Spring Hibernate - 无法为当前线程获取事务同步的Session

我用spring + hibernate创建了一个应用程序,但我总是遇到这个错误.这是我第一次使用hibernate的应用程序,我读了一些指南,但我无法解决这个问题.我哪里做错了?

这是我的应用程序的代码

ott 05, 2014 4:03:06 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
Informazioni: Refreshing   org.springframework.context.support.ClassPathXmlApplicationContext@1eab16b: startup date  [Sun Oct 05 16:03:06 CEST 2014]; root of context hierarchy
ott 05, 2014 4:03:06 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
Informazioni: Loading XML bean definitions from class path resource [springConfig.xml]
ott 05, 2014 4:03:08 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.5.Final}
ott 05, 2014 4:03:08 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.3.6.Final}
ott 05, 2014 4:03:08 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found …
Run Code Online (Sandbox Code Playgroud)

spring hibernate spring-mvc spring-orm

92
推荐指数
4
解决办法
17万
查看次数

在Spring MVC中使用ScrollableResults支持的Stream作为返回类型时遇到问题


重要说明:这已被接受为具有4.1.2的目标修订版本的Spring问题.


我的目标是在从Hibernate生成HTTP响应时实现O(1)空间复杂度ScrollableResults.我想保留MessageConverter调度a的标准机制来处理从a返回的对象@Controller.我已经设置了以下内容:

  1. MappingJackson2HttpMessageConverter丰富了JsonSerializer处理Java 8的a Stream;
  2. 定制ScrollableResultSpliterator包装需要ScrollableResultsStream;
  3. OpenSessionInViewInterceptor需要保持Hibernate会话在MessageConverter;
  4. 设置hibernate.connection.release_modeON_CLOSE;
  5. 确保JDBC连接具有必要的ResultSet可保持性:con.setHoldability(ResultSet.HOLD_CURSORS_OVER_COMMIT).

另外,我需要一个支持这种可保持性的数据库.PostgreSQL就是这样一个数据库,我对此没有任何麻烦.

我遇到的最后一个绊脚石是HibernateTransactionManager事务提交所使用的策略:除非底层会话是"Hibernate管理的",否则它会disconnect()关闭我的光标以及其他所有内容.这样的策略在某些特殊情况下很有用,特别是"会话范围会话",这些会议远离我的要求.

我设法用一个糟糕的黑客解决这个问题:我不得不用一种方法来覆盖有问题的方法,该方法实际上是原始的复制粘贴,除了被移除的disconnect()调用,但它必须求助于反射来访问私有API.

public class NoDisconnectHibernateTransactionManager extends HibernateTransactionManager
{
  private static final Logger logger = LoggerFactory.getLogger(NoDisconnectHibernateTransactionManager.class);

  public NoDisconnectHibernateTransactionManager(SessionFactory sf) { super(sf); }

  @Override
  protected void doCleanupAfterCompletion(Object transaction) {
    final JdbcTransactionObjectSupport txObject = (JdbcTransactionObjectSupport) transaction;
    final Class<?> c = …
Run Code Online (Sandbox Code Playgroud)

java hibernate open-session-in-view spring-orm java-8

66
推荐指数
1
解决办法
1801
查看次数

Spring 3.1 Hibernate 4继承异常[无法强制转换为org.hibernate.mapping.RootClass]

嗨,我刚刚开始使用Spring,使用Hibernate4和maven.基本上我的类层次结构是从MicroTask扩展的HUmanMicroTask.将来可能会有其他几个类从MicroTask扩展.我试图为每个具体类创建一个表,这是使用spring3和hibernate 4启动和运行的最简单方法.但是当我运行我的代码时.我一直得到以下异常

13:11:52,260 ERROR TestContextManager:324 - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@6ef137d] to prepare test instance [HumanMicroTaskBaseHibernateTest@52c05d3b]
java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:157)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:288)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:290)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate spring-orm

43
推荐指数
3
解决办法
3万
查看次数

Spring + hibernate与Spring Data JPA:它们有什么不同吗?

虽然不是新手,但我正在努力学习弹簧框架(再次!),以确保我真正理解这一点.我对核心Spring(DI)有了一个很好的想法.现在,我专注于数据层.

我遇到过" Spring and Hibernate " 这个词.我可以解释它意味着将Spring Framework与Hibernate一起用作ORM工具/ JPA提供程序.

现在我遇到了" Spring Data JPA ".我澄清了有关Spring Data JPA的内容,它是JPA的一个抽象层(在Spring Data JPA下使用Hibernate或任何其他JPA提供程序).

现在这些术语是一样的吗?也就是说," Spring + hibernate "与" Spring Data JPA "相同.如果没有,那么差异/相似之处是什么?

我真的很困惑很多条款/声明(如上所述)似乎相似,但可能会有所不同.

spring hibernate jpa spring-orm spring-data-jpa

41
推荐指数
2
解决办法
1万
查看次数

LocalContainerEntityManagerFactoryBean和LocalEntityManagerFactoryBean有什么区别?

任何人都可以解释Spring Framework的LocalContainerEntityManagerFactoryBeanLocalEntityManagerFactoryBean之间的区别是什么?

spring hibernate jpa entitymanager spring-orm

39
推荐指数
5
解决办法
2万
查看次数

Spring 3.1 entityManagerFactory java.lang.NoSuchFieldError:NULL错误

我刚刚将Spring 3.0.5迁移到3.1 GA.初始化期间我遇到运行时错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/spring/infrastructure-config.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchFieldError: NULL
...
Caused by: java.lang.NoSuchFieldError: NULL
    at org.springframework.expression.TypedValue.<clinit>(TypedValue.java:32)
    at org.springframework.expression.spel.support.StandardEvaluationContext.setRootObject(StandardEvaluationContext.java:85)
    at org.springframework.expression.spel.support.StandardEvaluationContext.<init>(StandardEvaluationContext.java:74)
    at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:124)
    at org.springframework.beans.factory.support.AbstractBeanFactory.evaluateBeanDefinitionString(AbstractBeanFactory.java:1299)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.evaluate(BeanDefinitionValueResolver.java:210)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:182)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1360)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1118)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
    ... 39 more
Run Code Online (Sandbox Code Playgroud)

这是我的xml.

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="MyPersistenceUnit" />
  </bean>
Run Code Online (Sandbox Code Playgroud)

这是java.lang.NoSuchFieldError: NULL关于什么的?没有3.0.5的问题.

java orm spring jpa spring-orm

35
推荐指数
1
解决办法
2万
查看次数

java.lang.IllegalArgumentException:期待IdClass映射

我已为我的实体配置了复合主键,Employee如下所示

Employee.java:

@Entity
@Table(name="employee")
@Proxy(lazy=false)
@IdClass(EmployeeId.class)
public class Employee implements Serializable {
    private static final long serialVersionUID = 1L;

    private EmployeeId employeeId;
    private Person person;
    private Branch branch;
    private boolean isActive;

    public Employee() {

    }    

    @EmbeddedId
    @AttributeOverrides({
        @AttributeOverride(name="person", column = @Column(name="person_id")),
        @AttributeOverride(name="branch", column = @Column(name="branch_id"))})

    public EmployeeId getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(EmployeeId employeeId) {
        this.employeeId = employeeId;
    }

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="person_id")
    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person; …
Run Code Online (Sandbox Code Playgroud)

java sessionfactory spring-orm spring-4 hibernate-5.x

23
推荐指数
2
解决办法
9119
查看次数

如何使用XML配置将多个包传递到Spring中的packagesToScan属性

假设我在不同模块中有两个包com.test1com.test2,名为M 1(com.test1)和M2(com.test2).

现在,在以下示例中,我配置了module1包.

<bean id="entityManager" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">        
       <property name="packagesToScan" value="com.test1" />
       <property name="dataSource" ref="dataSource" />
       <property name="jpaVendorAdapter" ref="hibernateVendor" />
       <property name="jpaPropertyMap" ref="jpaPropertyMap" />
   </bean>
Run Code Online (Sandbox Code Playgroud)

但我想在packagesToScan属性中配置Module2包.如何配置.

spring spring-orm

22
推荐指数
1
解决办法
3万
查看次数

java.lang.ClassNotFoundException:org.hibernate.engine.SessionFactoryImplementor

我正在尝试使用spring 3.1.1.RELEASE迁移到hibernate 4.1.0.Final, 以下是我对hibernate的配置:

    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="${project.groupId}.domain" />


    <!-- control the behavior of Hibernate at runtime,All are optional and 
        have reasonable default values -->
    <property name="hibernateProperties">
        <value>
            <!-- hibernate.dialect: allows Hibernate to generate SQL optimized for 
                a particular relational database -->
            hibernate.dialect=org.hibernate.dialect.MySQLDialect
            hibernate.hbm2ddl.auto=create-drop
            hibernate.show_sql=false
            hibernate.jdbc.fetch_size=100
            hibernate.jdbc.batch_size=100
            hibernate.jdbc.batch_versioned_data=true
            hibernate.order_inserts=true
            hibernate.order_updates=true
            hibernate.cache.use_query_cache=false
            hibernate.cache.use_second_level_cache=false

        </value>
    </property>


</bean>

<!-- provides properties to hibernate to make it able to create session 
    factory. Hibernate uses instance of session bean …
Run Code Online (Sandbox Code Playgroud)

spring hibernate java-ee spring-orm

21
推荐指数
1
解决办法
4万
查看次数