标签: spring-data

Spring实体管理器和Spring Data Repository之间有什么区别?

我在网站上使用JPA.在探索了保存数据的选项后,我找到了2种方法.第一种方法是使用javax.persistence.EntityManager的实现.我使用LocalContainerEntityManagerFactoryBean来实例化EntityManager的实例.一旦我获得了EntityManager的实例,我就可以用它来保存实体.例如,

entityManager.merge(someEntity);
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用org.springframework.data.repository.CrudRepository的实例.一,我获得了一个CrudRepository的实例,我可以用它来保存一个实体.例如,

aCrudRepository.save(someEntity);
Run Code Online (Sandbox Code Playgroud)

使用EntityManager和CrudRepository将实体持久化到数据库之间有什么区别?这两种方法(实体管理器与crud存储库)有什么好处或坏处?

spring jpa spring-data spring-data-jpa

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

同时使用Hibernate和Spring数据jpa?

是否可以使用Spring Data JPA(由Hibernate作为JPA提供程序支持)并同时直接使用Hibernate?

问题是,当我使用JpaTransactionManager时,我无法检索当前会话org.hibernate.HibernateException: No Session found for current thread.当我切换到HibernateTransaction管理器时,JPA存储库无法提交更改.

这是我的Spring上下文的一部分(使用该上下文我不能使用直接的Hibernate调用):

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/IPGCONF"/>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
      p:dataSource-ref="dataSource">
    <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
</bean>

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

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
    <property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>

<jpa:repositories base-package="com.satgate"/>
Run Code Online (Sandbox Code Playgroud)

hibernate存储库的示例:

public Collection<Layer> listCurrent(Carrier carrier) {
    Criteria query = sessionFactory.getCurrentSession()
                    .createCriteria(Layer.class)
                    .add(Restrictions.eq("carrier", carrier));
    query.createCriteria("bitrate")
            .addOrder(Order.desc("bitrate"))
            .add(Restrictions.eq("symbolrate", carrier.getSymbolrate()));
    return query.list();
}
Run Code Online (Sandbox Code Playgroud)

Spring数据存储库定义的示例:

public interface BitrateRepository extends PagingAndSortingRepository<Bitrate, Long> …
Run Code Online (Sandbox Code Playgroud)

java spring hibernate jpa spring-data

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

MongoDB的Spring Data MongoDB和Hibernate OGM有什么区别?

我之前没有使用过Spring Data,但是我已经多次使用Hibernate ORM用于基于MySQL的应用程序.我只是不明白为基于MongoDB的应用程序在两者之间选择哪个框架.

我已经尝试寻找答案,但我找不到在生产环境中对两者进行比较的答案.有没有人发现使用MongoDB使用这两个框架有问题?

spring mongodb spring-data spring-data-mongodb hibernate-ogm

32
推荐指数
2
解决办法
8584
查看次数

如何在Spring Boot中使用Spring管理的Hibernate拦截器?

是否有可能在Spring Boot中集成Spring管理的Hibernate拦截器(http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch14.html)?

我正在使用Spring Data JPA和Spring Data REST,并且需要一个Hibernate拦截器来对实体上的特定字段进行更新.

使用标准JPA事件,不可能获得旧值,因此我认为我需要使用Hibernate拦截器.

hibernate spring-data spring-data-jpa spring-data-rest spring-boot

32
推荐指数
6
解决办法
4万
查看次数

Spring Data JPA智能无法在Intellij中运行

我已经使用Spring Data JPA设置了一个spring boot项目,但我没有看到Spring数据jpa的智能. 在此输入图像描述

屏幕截图显示问题,我的餐厅实体有一个变量调用restaurantAddress,我试图让intelliJ帮助我完成编码,但没有智能显示.

我的项目设置如下:

申请类:

@SpringBootApplication
@ComponentScan(basePackages = {"com.mycompany"})
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>food</artifactId>
    <version>1.0-SNAPSHOT</version>


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.7.RELEASE</version>
    </parent>

    <dependencies>
        <!-- Dependencies for RESTful Web Services -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Dependencies for JPA Data Persistence -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <!--JDBC-->
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.1-901-1.jdbc4</version>
        </dependency>

    </dependencies>


    <build>
        <finalName>food</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration> …
Run Code Online (Sandbox Code Playgroud)

spring intellij-idea spring-data spring-data-jpa

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

Spring Data REST在不使用DTO的情况下通过REST资源公开实体是否有问题?

在我有限的经验中,我一再被告知你不应该将实体传递到前端或通过休息,而是使用DTO.

Spring Data Rest不是这样做的吗?我简要介绍了一些预测,但这些似乎只是限制了返回的数据,并且仍然期望一个实体作为post方法的参数来保存到数据库中.我在这里错过了什么,或者我(和我的同事)是不正确的,因为你不应该传递和实体?

rest spring domain-driven-design spring-data spring-data-rest

32
推荐指数
3
解决办法
5583
查看次数

Spring-Data JPA:保存引用现有实体的新实体

问题基本上与下面的问题相同:

JPA级联持久化并且对分离实体的引用会抛出PersistentObjectException.为什么?

我正在创建一个引用现有的独立实体的新实体.现在,当我在Spring数据存储库中保存此实体时,会抛出异常:

org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist
Run Code Online (Sandbox Code Playgroud)

如果我们看一下spring数据JPA的源代码中的save()方法,我们看到:

public <S extends T> S save(S entity) {

    if (entityInformation.isNew(entity)) {
        em.persist(entity);
        return entity;
    } else {
        return em.merge(entity);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我们看看isNew()in AbstractEntityInformation

public boolean isNew(T entity) {

    return getId(entity) == null;
}
Run Code Online (Sandbox Code Playgroud)

所以基本上如果我保存()一个新实体(id == null),spring数据将始终调用persist,因此这种情况总是会失败.

在向集合添加新项目时,这似乎是一个非常典型的用例.

我该如何解决这个问题?

编辑1:

注意:

此问题与如何保存引用Spring JPA中现有实体的新实体没有直接关系.详细说明假设您获得了通过http创建新实体的请求.然后,您从请求中提取信息,并创建您的实体和现有的实体.因此,他们将永远脱离.

java merge persist spring-data spring-data-jpa

31
推荐指数
2
解决办法
4万
查看次数

Spring Boot应用程序启动速度非常慢

我有一个简单的Spring Boot应用程序,它连接到PostgreSQL数据库并充当JSON服务.不知怎的,创业公司变得非常慢,见时间10:37:10和10:38:00:

2015-05-09 10:37:09.649  INFO 20880 --- [lication.main()] o.apache.catalina.core.StandardService   : Starting service Tomcat
2015-05-09 10:37:09.651  INFO 20880 --- [lication.main()] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.20
2015-05-09 10:37:09.767  INFO 20880 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2015-05-09 10:37:09.767  INFO 20880 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2970 ms
2015-05-09 10:37:09.979  INFO 20880 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2015-05-09 10:37:09.985  INFO 20880 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
2015-05-09 …
Run Code Online (Sandbox Code Playgroud)

postgresql spring spring-data spring-data-jpa spring-boot

31
推荐指数
4
解决办法
2万
查看次数

您是否应该在JPA中为每个表创建一个存储库?

您是否应该在JPA中为每个表创建一个存储库?如果没有,您如何解决存储库数据库中的泛型?

例如,下面是一个StoreRepository.它处理对象的CRUD操作Store.如果我希望存储库也保存一个StoreEvent对象,我将如何更改下面的接口以容纳这两个对象?

@Repository
public interface StoreRepository extends JpaRepository<Store, String> {
    public Store findByGuid(String guid);
}
Run Code Online (Sandbox Code Playgroud)

java jpa spring-data spring-data-jpa

30
推荐指数
1
解决办法
8539
查看次数

如何使用Spring RestTemplate使用Page <Entity>响应

我正在使用spring数据(mongoDb),我有我的存储库:

public interface StoriesRepository extends PagingAndSortingRepository<Story, String> {}
Run Code Online (Sandbox Code Playgroud)

然后我有一个控制器:

@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<Page<StoryResponse>> getStories(Pageable pageable) {
    Page<StoryResponse> stories = storiesRepository.findAll(pageable).map(StoryResponseMapper::toStoryResponse);
    return ResponseEntity.ok(stories);
}
Run Code Online (Sandbox Code Playgroud)

一切正常,但我无法使用RestTemplate getForEntity方法使用我的端点:

def entity = restTemplate.getForEntity(getLocalhost("/story"), new TypeReference<Page<StoryResponse>>(){}.class)
Run Code Online (Sandbox Code Playgroud)

我应该提供什么类来成功反序列化我的实体页面?

java rest spring spring-data spring-data-rest

30
推荐指数
4
解决办法
2万
查看次数