javascript

java

python

c#

android

node.js

c++

reactjs

php

html

jquery

css

.net

ios

git

ruby-on-rails

sql

c

string

ruby

java-PageRequest構造函數已被棄用

我正在使用Spring Data Commons v2 +快照,并且發現PageRequest的構造函數已被棄用。 這似乎發生在M1和M2之間。 不幸的是,這是Pageable接口的唯一[實際]實現。 我想知道努力的方向,對于當前的開發有什么更好的選擇。

trans by 2020-02-29T15:46:45Z

java-如何手動強制@Transactional方法中的提交?

這個問題已經在這里有了答案:

  • 如何將數據刷新到活動的Spring事務中的db                                     4個答案

我正在使用Spring / Spring-data-JPA,發現自己需要在單元測試中手動強制提交。 我的用例是我正在做一個多線程測試,其中我必須使用在生成線程之前保留的數據。

不幸的是,鑒于測試是在commit()事務中運行的,因此即使flush也無法使其對生成的線程進行訪問。

   @Transactional   
   public void testAddAttachment() throws Exception{
        final Contract c1 = contractDOD.getNewTransientContract(15);
        contractRepository.save(c1);
          
trans by 2020-02-15T04:54:35Z

帶分頁的Spring數據和本機查詢

在一個Web項目中,將最新的spring-data(1.10.2)與MySQL 5.6數據庫一起使用,我試圖使用帶有分頁的本機查詢,但是在啟動時遇到containsPageableOrSortInQueryExpression

更新:20180306此問題現在已在Spring 2.0.4中修復。對于仍對舊版本感興趣或仍在使用舊版本的人,請查看相關答案和評論以找到解決方法。

根據spring-data文檔中使用@Query的示例50,可以指定查詢本身和countQuery,如下所示:

public interface UserRepository extends JpaRepository<User, Long> {
  @Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
    countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
    nativeQuery = true)
  Page<User> findByLastname(String lastname, Pageable pageable);
}

出于好奇,在containsPageableOrSortInQueryExpression類中,我可以看到它包含以下代碼來檢查它是否為有效的jpa查詢:

public NativeJpaQuery(JpaQueryMethod method, EntityManager em, String queryString, EvaluationContextProvider evaluationContextProvider, SpelExpressionParser parser) {
   super(method, em, queryString, evaluationContextProvider, parser);
   JpaParameters parameters = method.getParameters();
   boolean hasPagingOrSortingParameter = parameters.hasPageableParameter() || parameters.hasSortParameter();
   boolean containsPageableOrSortInQueryExpression = queryString.contains("#pageable") || queryString.contains("#sort");
   if(hasPagingOrSortingParameter && !containsPageableOrSortInQueryExpression) {
       throw new InvalidJpaQueryMethodException("Cannot use native queries with dynamic sorting and/or pagination in method " + method);
   }
}

我的查詢包含containsPageableOrSortInQueryExpression參數,因此falsetrue,但它也在queryString(這是我未提供的)中尋找queryString#sort序列。

我嘗試在查詢末尾添加containsPageableOrSortInQueryExpression(這是一條注釋)可以领救济金的游戏,這使驗證通過,但是執行失敗,說查詢需要一個附加參數:3而不是2。

有趣的是,如果我在運行時將containsPageableOrSortInQueryExpressionfalse手動更改為true,查詢工作正常,所以我不知道為什么要在我的queryString處檢查該字符串,并且不知道如何提供它。

任何幫助將非常感激。

更新01/30/2018似乎Spring-data項目的開發人員正在通過Jens Schauder的PR來解決此問題。

trans by 2020-02-13T22:40:57Z

java-使用Spring Data JPA查找實體時如何啟用LockModeType.PESSIMISTIC_WRITE?

我該如何實現與以下代碼等效的功能:

tx.begin();
Widget w = em.find(Widget.class, 1L, LockModeType.PESSIMISTIC_WRITE);
w.decrementBy(4);
em.flush();
tx.commit();

...但是使用Spring和Spring-Data-JPA批注?

我現有代碼的基礎是:

@Service
@Transactional(readOnly = true)
public class WidgetServiceImpl implements WidgetService
{
  @Autowired
  private WidgetRepository repo;
  @Transactional(readOnly = false)
  public void updateWidgetStock(Long id, int count)
  {
    Widget w = this.repo.findOne(id);
    w.decrementBy(4);
    this.repo.save(w);
  }
}

但是我不知道如何指定updateWidgetStock()方法中的所有操作都應使用悲觀鎖集。

Spring Data JPA批注updateWidgetStock()可讓您設置LockModeType.PESSIMISTIC_WRITE,但我不知道將其放在updateWidgetStock方法上是否有效。 聽起來更像是WidgetRepository上的注釋,因為Javadoc說:

org.springframework.data.jpa.repository
@Target(值=方法)
@Retention(值=運行時間)
@記錄
公共@接口鎖
用于指定執行查詢時要使用的LockModeType的注釋。 當在查詢方法上使用Query或從方法名稱派生查詢時,將對它進行評估。

...因此似乎無濟于事。

如何使我的updateWidgetStock()方法與LockModeType.PESSIMISTIC_WRITE集一起執行?

trans by 2020-02-12T09:56:23Z

具有參數屬性的Spring數據JPA查詢

聲明使用輸入參數的屬性作為查詢參數的Spring數據JPA查詢的最簡單方法是什么?

例如,假設我有一個實體類:

public class Person {
    @Id
    private long id;
    @Column
    private String forename;
    @Column
    private String surname;
}

和另一類:

public class Name {
    private String forename;
    private String surname;
    [constructor and getters]
}

...那么我想編寫一個Spring數據存儲庫,如下所示:

public interface PersonRepository extends CrudRepository<Person, Long> {
    @Query("select p from Person p where p.forename = ?1.forename and p.surname = ?1.surname")
    findByName(Name name);
}

...但是Spring數據/ JPA不喜歡我在?1參數上指定屬性名稱。

什么是最巧妙的選擇?

trans by 2020-02-08T16:17:40Z

java-了解Spring Data JPA @NoRepositoryBean

在閱讀Spring Data文檔時,我多次遇到@NoRepositoryBean接口。

引用文檔:

如果您使用的是自動存儲庫界面檢測   使用該接口的Spring命名空間照常使用將導致Spring   嘗試創建MyRepository的實例。 當然不是   期望的,因為它只是存儲庫和   您要為每個實體定義的實際存儲庫接口。 至   排除將擴展存儲庫的接口實例化為   存儲庫實例用@NoRepositoryBean對其進行注釋。

但是,我仍然不確定何時何地使用它。 有人可以建議并給我一個具體的用法示例嗎?

trans by 2020-02-05T19:36:10Z

Spring Data Rest-按多個屬性排序

我有一個實體如下

Class Person{
String id;
String name;
String numberOfHands;
}

借助Spring Data Rest(Gosling發布培訓),我可以指定

localhost/Person?sort=name,asc

用于對名稱進行升序排序。 現在,在需要按numberOfHands降序和名稱升序排序的情況下。 我可以指定

localhost/Person?sort=numberOfHands,name,asc

但是,我無法指定

localhost/Person?sort=numberOfHands,desc,name,asc

有沒有一種方法可以指定多個排序順序?

謝謝!

trans by 2020-02-05T00:51:16Z

java-為什么在Spring Data JPA存儲庫中的save()之后使用返回的實例?

這是代碼:

@Repository
public interface AccountRepository extends JpaRepository<Account, Long> {}

Spring Data JPA項目中的JpaRepository。

這是測試代碼:

public class JpaAccountRepositoryTest extends JpaRepositoryTest {
    @Inject
    private AccountRepository accountRepository;
    @Inject
    private Account account;
    @Test
    @Transactional
    public void createAccount() {
        Account returnedAccount = accountRepository.save(account);
        System.out.printf("account ID is %d and for returned account ID is %d\n", account.getId(), returnedAccount.getId());
    }
}

結果如下:

account ID is 0 and for returned account ID is 1

這是來自CrudReporsitory.save()javadoc的:

保存給定的實體。 將返回的實例用于進一步的操作,因為保存操作可能已完全更改了實體實例。

這是來自Spring Data JPA的SimpleJpaRepository的實際代碼:

 @Transactional
    public T save(T entity) { 
            if (entityInformation.isNew(entity)) {
                    em.persist(entity);
                    return entity;
            } else {
                    return em.merge(entity);
            }
    }

因此,問題是為什么我們需要使用返回的實例而不是原始實例? (是的,我們必須這樣做,否則我們將繼續使用分離的實例,但是為什么)

原始的EntityManager.persist()方法返回void,因此我們的實例將附加到持久性上下文。 在將帳戶保存到存儲庫時,是否發生一些代理魔術? 它是Spring Data JPA項目的架構限制嗎?

trans by 2019-11-17T23:58:55Z

無法在Spring B中自動裝配@Repository帶注釋的接口

我正在開發一個Spring Boot應用程序,并且在這里遇到了一個問題。 我試圖注入一個@Repository注釋的接口,它似乎根本不起作用。 我收到這個錯誤

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springBootRunner': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.pharmacy.persistence.users.dao.UserEntityDao com.pharmacy.config.SpringBootRunner.userEntityDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.pharmacy.persistence.users.dao.UserEntityDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
    at com.pharmacy.config.SpringBootRunner.main(SpringBootRunner.java:25)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.pharmacy.persistence.users.dao.UserEntityDao com.pharmacy.config.SpringBootRunner.userEntityDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.pharmacy.persistence.users.dao.UserEntityDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:561)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    ... 16 common frames omitted
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.pharmacy.persistence.users.dao.UserEntityDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1301)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1047)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:942)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
    ... 18 common frames omitted

這是我的代碼:

主要應用類別:

package com.pharmacy.config;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan("org.pharmacy")
public class SpringBootRunner {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootRunner.class, args);
    }
}

實體類:

package com.pharmacy.persistence.users;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class UserEntity {
    @Id
    @GeneratedValue
    private Long id;
    @Column
    private String name;
}

倉庫接口:

package com.pharmacy.persistence.users.dao;
import com.pharmacy.persistence.users.UserEntity;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserEntityDao extends CrudRepository<UserEntity,Long>{
}

控制器:

package com.pharmacy.controllers;
import com.pharmacy.persistence.users.UserEntity;
import com.pharmacy.persistence.users.dao.UserEntityDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HomeController {
    @Autowired
    UserEntityDao userEntityDao;
    @RequestMapping(value = "/")
    public String hello() {
        userEntityDao.save(new UserEntity("ac"));
        return "Test";
    }
}

的build.gradle

buildscript {
    ext {
        springBootVersion = '1.2.2.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}
apply plugin: 'java'
apply plugin: 'idea'
apply plugin: 'spring-boot'
mainClassName = "com.pharmacy.config.SpringBootRunner"
jar {
    baseName = 'demo'
    version = '0.0.1-SNAPSHOT'
}
repositories {
    mavenCentral()
}
dependencies {
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-starter-ws")
    compile("postgresql:postgresql:9.0-801.jdbc4")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

application.properties:

spring.view.prefix: /
spring.view.suffix: .html
spring.jpa.database=POSTGRESQL
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=update
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=abc123

我什至將我的代碼與“訪問數據jpa”進行了比較,但我幾乎沒有想到此代碼有什么問題。任何幫助表示贊賞。 提前致謝。

編輯:我按照建議的方式將代碼更改為上面的樣子,并且在將@Repository接口注入另一個組件時沒有出現該錯誤。 但是,我現在遇到了問題-無法檢索我的組件(我使用了調試)。 我做錯了什么,所以春天找不到我的零件?

trans by 2019-11-06T04:33:18Z

java-Spring Boot中的spring.jpa.open-in-view = true屬性是什么?

我在Spring Boot文檔中看到了JPA配置spring.jpa.open-in-view=true的此屬性。順便說一句,它被設置為true,所以它是默認值嗎?

到底是什么意思 我沒有對此行為做任何解釋。

應該使用Hibernate SessionFactory代替EntityManagerFactory嗎? 如果是,如何設置為EntityManagerFactory

感謝任何幫助。

謝謝!

trans by 2019-10-10T09:03:10Z

Spring Boot以及如何配置與MongoDB的連接詳細信息?

作為Spring Boot的新手,我想知道如何為MongoDB配置連接詳細信息。我已經嘗試了正常示例,但沒有一個涵蓋連接詳細信息。

我想指定將要使用的數據庫以及運行MongoDB的主機的url /端口。

有任何提示或提示嗎?

trans by 2019-10-01T00:31:59Z

java-Spring Data的MongoTemplate和MongoRepository有什么區別?

我需要編寫一個應用程序,可以使用spring-data和mongodb進行復雜的查詢。 我一直從使用MongoRepository開始,但是在復雜的查詢中苦苦尋找實例或真正理解語法。

我說的是這樣的查詢:

@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
    List<User> findByEmailOrLastName(String email, String lastName);
}

或使用基于JSON的查詢(由于語法不正確),因此我嘗試了多次嘗試。 即使在閱讀了mongodb文檔之后(由于語法錯誤,仍無法正常工作的示例)。

@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String> {
    @Query("'$or':[{'firstName':{'$regex':?0,'$options':'i'}},{'lastName':{'$regex':?0,'$options':'i'}}]")
    List<User> findByEmailOrFirstnameOrLastnameLike(String searchText);
} 

閱讀完所有文檔后,似乎mongoTemplate的文檔比MongoRepository的文檔要好得多。我指的是以下文檔:

[http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/]

您能告訴我使用什么更方便和更強大嗎? mongoTemplateMongoRepository? 兩者都是成熟的,還是其中一個比另一個缺少更多的功能?

trans by 2019-09-24T18:46:19Z

java-如何實際實現Spring Data存儲庫?

我在項目中使用Spring Data JPA存儲庫已有一段時間了,我知道以下幾點:

  • 在存儲庫界面中,我們可以添加findByCustomerNameAndPhone()之類的方法(假設customerNamephone是域對象中的字段)。
  • 然后,Spring通過在運行時(在應用程序運行期間)實現上述存儲庫接口方法來提供實現。

我對它的編碼方式很感興趣,并查看了Spring JPA源代碼和API,但是找不到以下問題的答案:

  1. 如何在運行時生成存儲庫實現類以及如何實現和注入方法?
  2. Spring Data JPA是否使用CGlib或任何字節碼操作庫來實現方法并動態注入?

您能否為上述查詢提供幫助,并提供任何受支持的文檔?


Spring DAO vs Spring ORM vs Spring JDBC

我正在瀏覽Spring支持的數據訪問技術,我注意到它提到了多個選項,我不確定它們之間的區別:

  • Spring-DAO([http://docs.spring.io/spring/docs/2.0.8/reference/dao.html]]
  • Spring-ORM([http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/orm.html]]
  • Spring-JDBC([http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html]]

據我所知,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的名字?

trans by 2019-08-20T07:37:59Z

java - 用于Spring-Data-JPA注釋的setMaxResults?

我正在嘗試將Spring-Data-JPA合并到我的項目中。讓我困惑的一件事是如何通過注釋實現setMaxResults(n)?

例如,我的代碼:

public interface UserRepository extends CrudRepository<User , Long>
{
  @Query(value="From User u where u.otherObj = ?1 ")
  public User findByOhterObj(OtherObj otherObj);
}

我只需要從otherObj返回CrudRepository用戶,但我找不到一種方法來注釋maxResults ...有人可以給我一個提示嗎?

(mysql抱怨:

com.mysql.jdbc.JDBC4PreparedStatement@5add5415: select user0_.id as id100_, user0_.created as created100_ from User user0_ where user0_.id=2 limit ** NOT SPECIFIED **
WARN  util.JDBCExceptionReporter - SQL Error: 0, SQLState: 07001
ERROR util.JDBCExceptionReporter - No value specified for parameter 2

我找到了一個鏈接:[https://jira.springsource.org/browse/DATAJPA-147],我試過但失敗了。 現在似乎不可能?為什么Spring-Data中沒有內置這么重要的功能?

如果我手動實現此功能:

public class UserRepositoryImpl implements UserRepository

我必須在CrudRepository中實現大量的預定義方法,這將是可怕的。

環境:spring-3.1,spring-data-jpa-1.0.3.RELEASE.jar,spring-data-commons-core-1.1.0.RELEASE.jar

trans by 2019-07-30T12:16:03Z

單元測試 - 如何測試Spring Data存儲庫?

我想要一個在Spring Data的幫助下創建的存儲庫(例如,EntityManager)。 我是spring-data(但不是spring)的新手,我使用的是本教程。 我選擇處理數據庫的技術是JPA 2.1和Hibernate。 問題是我對如何為這樣的存儲庫編寫單元測試一無所知。

我們以EntityManager方法為例。 當我正在測試時,我應該為它編寫單元測試 - 這就是我遇到的三個問題:

  • 首先,如何將EntityManager的模擬注入到Query接口的不存在實現中? Spring Data將基于此接口生成實現:

    EntityManager

    但是,我不知道如何強制它使用EntityManager模擬和其他模擬 - 如果我自己編寫了實現,我可能會有Query的setter方法,允許我使用我的模擬進行單元測試。 (至于實際的數據庫連接,我有一個verify(entityManager).createNamedQuery(anyString()).getResultList();類,注釋@Configuration@EnableJpaRepositories,它以編程方式定義了DataSource,4435980036726588422,EntityManager等的bean。 - 但是存儲庫應該是測試友好的并且允許覆蓋這些東西)。

  • 其次,我應該測試互動嗎? 我很難弄清楚應該調用EntityManagerQuery的方法(類似于那個verify(entityManager).createNamedQuery(anyString()).getResultList();),因為編寫實現的不是我。

  • 第三,我是否應該首先對Spring-Data生成的方法進行單元測試? 據我所知,第三方庫代碼不應該進行單元測試 - 只有開發人員自己編寫的代碼應該進行單元測試。 但如果這是真的,它仍然會將第一個問題帶回現場:比方說,我的存儲庫有幾個自定義方法,我將為其編寫實現,如何注入我的模擬EntityManagerQuery到最后 ,生成存儲庫?

注意:我將使用集成和單元測試來測試驅動我的存儲庫。 對于我的集成測試,我使用的是HSQL內存數據庫,顯然我沒有使用數據庫進行單元測試。

也許第四個問題,在集成測試中測試正確的對象圖創建和對象圖檢索是否正確(比方說,我有一個用Hibernate定義的復雜對象圖)?

更新:今天我繼續嘗試模擬注入 - 我創建了一個靜態內部類來允許模擬注入。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@Transactional
@TransactionConfiguration(defaultRollback = true)
public class UserRepositoryTest {
@Configuration
@EnableJpaRepositories(basePackages = "com.anything.repository")
static class TestConfiguration {
    @Bean
    public EntityManagerFactory entityManagerFactory() {
        return mock(EntityManagerFactory.class);
    }
    @Bean
    public EntityManager entityManager() {
        EntityManager entityManagerMock = mock(EntityManager.class);
          
trans by 2019-07-14T19:45:06Z

hibernate - 在Spring B中禁用所有與數據庫相關的自動配置

我使用Spring Boot開發兩個應用程序,一個用作服務器,另一個用作客戶端應用程序。 但是,它們都是相同的應用程序,根據活動配置文件的功能不同。 我正在使用Spring Boot的自動配置功能來配置我的應用程序。

我想在客戶端應用程序上禁用所有與數據庫相關的自動配置,因為它不需要數據庫連接。 應用程序不應嘗試與數據庫建立連接,也不應嘗試使用任何Spring Data或Hibernate功能。 啟用或禁用數據庫自動配置應該是有條件的,并且基于應用程序的活動配置文件。

我可以通過為各個配置文件創建兩個不同的application.properties文件來實現此目的嗎?

我嘗試將其添加到我的屬性文件中,

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration\
  org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration\
  org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration

但是,應用程序仍然嘗試在啟動時連接到數據庫。 這些排除是否足以滿足我的要求?

trans by 2019-06-23T02:43:09Z

如何向Spring Data JPA添加自定義方法

我正在研究Spring Data JPA。 考慮下面的示例,我將默認使用所有crud和finder功能,如果我想自定義查找器,那么也可以在界面本身輕松完成。

@Transactional(readOnly = true)
public interface AccountRepository extends JpaRepository<Account, Long> {
  @Query("<JPQ statement here>")
  List<Account> findByCustomer(Customer customer);
}

我想知道如何為上述AccountRepository添加一個完整的自定義方法及其實現? 由于它的接口我無法在那里實現該方法。

trans by 2019-06-09T22:34:21Z

Spring Data:支持“刪除”嗎?

我使用Spring JPA進行數據庫訪問。 我能夠找到像findByName和countByName這樣的例子,我沒有必要編寫任何方法實現。 我希望找到基于某些條件刪除一組記錄的示例。

Spring JPA是否支持deleteByName-like delete? 任何指針都很受歡迎。

問候和感謝。


Spring Boot - 加載初始D

我想知道在應用程序啟動之前加載初始數據庫數據的最佳方法是什么? 我正在尋找的東西將使我的H2數據庫充滿數據。

例如,我有一個域模型“用戶”我可以通過轉到/ users來訪問用戶,但最初在數據庫中不會有任何用戶,所以我必須創建它們。 反正有沒有自動填充數據庫?

目前我有一個容器實例化的Bean,并為我創建用戶。

例:

@Component
public class DataLoader {
    private UserRepository userRepository;
    @Autowired
    public DataLoader(UserRepository userRepository) {
        this.userRepository = userRepository;
        LoadUsers();
    }
    private void LoadUsers() {
        userRepository.save(new User("lala", "lala", "lala"));
    }
}

但我非常懷疑這是的方法。 或者是嗎?

trans by 2019-04-20T21:17:58Z

1 2 下一頁 共2頁