Tag: spring data jpa

在Spring Boot中获取EntityManager的句柄

有没有办法获得给定实体对象的EntityManager句柄? 我正在使用带有JPA启动器的spring boot 1.2.3,我还使用@configuration显式配置了多个数据源 我已经检查了[已解决] SPRING BOOT对entityManager的访问权限 ,它似乎没有回答这个问题。 谢谢。 编辑:我添加了如何定义数据源的说明: @Component @Configuration public class DataSources { @Bean @Primary @ConfigurationProperties(prefix=”first.datasource”) public DataSource getPrimaryDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix=”second.datasource”) public DataSource getSecondDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix=”third.final.datasource”) public DataSource getThirdFinalDataSource() { return DataSourceBuilder.create().build(); } } 在我的application.yml中,我有以下部分 first.datasource: name: ‘first_datasource’, #other attributes… second.datasource: name: ‘second_datasource’, #other […]

如何将多个日期搜索与Spring Data JPA的CrudRepository结合起来?

spring-data提供了一种通过定义方法名称来生成SQL搜索的方法。 以下工作正常: @Entity public class Book { Date from, to; } //CrudRepository findByFromDateBetween(Date departure, Date arrival); 但为什么以下不起作用呢? findByFromDateBetweenAndToDateBetween(Date departure, Date arrival); 要连接两个日期搜索,我必须重复日期: findByFromDateBetweenAndToDateBetween(Date departure, Date arrival, Date departure, Date arrival); 问题:是否可以重复使用参数?

保存后刷新并获取实体(JPA / Spring Data / Hibernate)

我有这两个简单的实体Something and Property 。 Something实体与Property具有多对一关系,因此当我创建一个新的Something行时,我会分配一个现有的Property 。 东西: @Entity @Table(name = “something”) public class Something implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = “name”) private String name; @Column(name = “owner”) private String owner; @ManyToOne private Property property; // getters and setters @Override public String toString() […]

在使用审计时,如何自定义Spring-Data注入的AuditingHandler?

我正在使用Spring Data 1.5和Auditing。 AuditingEntityListener有一个setAuditingHandler方法。 如何自定义AuditingHandler并指示Spring-Data注入我的自定义处理程序而不是默认的org.springframework.data.auditing.AuditingHandler ? 我已经尝试实例化我自己的AuditingEntityListener ,我在其中注入了我自己的Handler,但这并没有完成这项工作。 默认处理程序仍在注入。 我已经通过XML配置和JavaConfig尝试了,看看是否有一个比另一个更好,但两种方式都不起作用。 JavaConfig: @Configuration @EnableJpaAuditing(auditorAwareRef=”auditorProvider”) public class AppConfig { @Bean public AuditorAware auditorProvider(){ return new SpringSecurityAuditorAware(); } @Bean public AuditingEntityListener auditingEntityListener(){ AuditingEntityListener listener = new AuditingEntityListener(); listener.setAuditingHandler(new com.ia.persistence.AuditingHandler()); return listener; } } 自定义处理程序: @Component public class AuditingHandler extends org.springframework.data.auditing.AuditingHandler { // SLF4J logger private static final Logger […]

spring-data:不是托管类型:类java.lang.Object

我昨天开始使用spring-data项目,并试图将测试添加到我创建的存储库中。 项目结构看起来像 persistence/pom.xml src/main/java/ ApplicationConfig BaseRepository Network src/main/test/BaseRepositoryTest ApplicationConfig看起来像 @Configuration @ComponentScan @EnableJpaRepositories public class ApplicationConfig { @Bean public DataSource dataSource() { final EmbeddedDatabaseBuilder embeddedDatabaseBuilder = new EmbeddedDatabaseBuilder(); embeddedDatabaseBuilder.setType(EmbeddedDatabaseType.H2); return embeddedDatabaseBuilder.build(); } @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { final HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter(); jpaVendorAdapter.setDatabase(Database.H2); jpaVendorAdapter.setGenerateDdl(true); final LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); localContainerEntityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter); localContainerEntityManagerFactoryBean.setPackagesToScan(getClass().getPackage().getName()); localContainerEntityManagerFactoryBean.setDataSource(dataSource()); return localContainerEntityManagerFactoryBean; […]

带@ EnableJpa *注释的Spring @WebMvcTest

我有以下主类。 @EnableJpaAuditing @SpringBootApplication @EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class) public class SampleApplication { public static void main(String[] args) { SpringApplication.run(SampleApplication.class, args); } } 以及unit testing类。 @RunWith(SpringRunner.class) @WebMvcTest(controllers = { AccountController.class }, secure = false) public class AccountControllerTest { @Autowired private MockMvc mockMvc; // Commented out below 如果我要运行unit testing,它会给我这个错误。 IllegalArgumentException:必须至少存在一个JPA元模型! 所以我研究了一下,发现它是由于@EnableJpa*注释在使用@WebMvcTest被置于主类中,因此它找不到@Entity类,因此出现错误消息。 我遇到了一个页面 ,并描述了我或多或少相同的问题,并建议使用@SpringBootTest和@AutoConfigureMockMvc而不是@WebMvcTest 。 这是唯一可行的方法吗? 我希望能够使用@WebMvcTest因为使用@SpringBootTest会加载完整的上下文,并且需要更长的时间来运行测试。 按要求包括测试类。 @WebMvcTest(controllers = […]

QueryDsl Web查询Map字段的键

概观 特定 Spring Data JPA,Spring Data Rest,QueryDsl 一个Meetup实体 使用Map properties字段 作为@ElementCollection持久存储在MEETUP_PROPERTY表中 一个MeetupRepository 扩展了QueryDslPredicateExecutor 我期待 一个Web查询 GET /api/meetup?properties[aKey]=aValue 仅返回具有指定键和值的属性条目的Meetup:aKey = aValue。 但是,这对我不起作用。 我错过了什么? 试着 简单的领域 简单的字段起作用,如名称和描述: GET /api/meetup?name=whatever 收集领域像参与者一样工作: GET /api/meetup?participants.name=whatever 但不是这个Map字段。 自定义QueryDsl绑定 我已经尝试通过拥有存储库来自定义绑定 extend QuerydslBinderCustomizer 并凌驾于 customize(QuerydslBindings bindings, QMeetup meetup) 方法,但正在命中customize()方法时,lambda中的绑定代码不是。 编辑:了解这是因为QuerydslBindings评估查询参数的方法不要让它与它内部持有的pathSpecs映射匹配 – 它有自定义绑定。 一些细节 Meetup.properties字段 @ElementCollection(fetch = FetchType.EAGER) @CollectionTable(name = “MEETUP_PROPERTY”, joinColumns = @JoinColumn(name […]

我应该使用Java 8默认方法来手动实现Spring Data存储库方法吗?

当使用新的Spring Data Evans版本时,能够使用java 8附带的一些好东西是很好的。其中一个是接口中的默认实现。 下面的存储库使用QueryDSL使查询类型安全。 我的问题是,在我写这篇文章之前,我使用了一个单独的UserRepositoryCustom接口的模式用于findByLogin ,然后是另一个类UserRepositoryImpl ,在该类中,我将使用@PersistenceContext来获取当前的EntityManager 。 如果没有课程,如何获得EntityManager ? 它甚至可能吗? @Repository public interface UserRepository extends JpaRepository { final QUser qUser = QUser.user; // How do I get the entityManager since this is a interface, i cannot have any variables? //@PersistenceContext //EntityManager entityManager; public default Optional findByLogin(String login) { JPAQuery query = new JPAQuery(entityManager); […]

Spring数据JPA带有动态where子句

我有一个基本的存储库,比如说IBaseRepository public interface IBaseRepository<T extends BaseEntity, PK extends Serializable> extends JpaRepository, JpaSpecificationExecutor { } 现在每个存储库类,例如UserRepository从此基本存储库扩展。 我怎样才能添加一般的方法 T findOne(String filter, Map params); 对于所有inheritance的类,以便调用 Map params = new HashMap(); params.put(“username”,”Lord”); params.put(“locked”,Status.LOCKED); userRepo.findeOne(“username = :username AND status = :locked”,params); 用动态where子句返回一条记录。

Spring数据JPA:如何启用级联删除而不引用父级中的子级?

也许这是一个过于简单的问题,但是当我尝试删除用户实体时,我遇到了exception。 用户实体: @Entity @Table(name = “users”) public class User { @Transient private static final int SALT_LENGTH = 32; @Id @GeneratedValue(strategy = GenerationType.AUTO) private int id; @NotNull private String firstName; @NotNull private String lastName; @Column(unique = true, length = 254) @NotNull private String email; // BCrypt outputs 60 character results. @Column(length = 60) private String hashedPassword; […]