Tag: spring data

Spring Data JPA:创建一个抽象存储库

鉴于以下类别: @MappedSuperclass @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) @DiscriminatorColumn(name=”animalType”,discriminatorType=DiscriminatorType.STRING) @QueryExclude public abstract class Animal {} @Entity @DiscriminatorValue(“dog”) public class Dog {} @Entity @DiscriminatorValue(“cat”) public class Cat {} 有可能以某种方式为Animal配置JPA存储库吗? 我试过了 public interface AnimalRepository extends JpaRepository 然而,这失败了: java.lang.IllegalArgumentException:不是托管类型:Animal 有没有办法配置这个? 我希望能够执行以下任务: @Autowired private AnimalRepository repository; public void doSomething() { Animal animal = repository.findById(123); animal.speak(); }

spring数据mongodb映射动态场

我在我的java类中有这个模型 @Document public class Template { private String type; private String code; @Version Long version; } 我需要添加一个名为template的新字段,并将此字段映射为动态,换句话说,我会像这样建模一个文档 { _id: ‘id’ type:’myType’, code:’myCode’ template:{ someFiled:[ { subField1:’value1′, subField2:’value2′ }, { sub1Field1:’1value1′, sub1Field2:’1value2′ } ………………….. ], otherField:[ { otherField1:’value1′, otherField2:’value2′ } ], ……… }, version:1000L } 有没有办法将字段注释为动态? 解 @Document public class Template { private String type; private […]

ClassCastException:尝试迭代实体ID时,无法将Integer强制转换为Long

我的服务中有以下方法: public Set moveHoldedCardsToNewBoard(Board newBoard, Board prevBoard) { Set boardCards = new HashSet(); if (prevBoard != null) { List holdedCardIds = getExcludedCardIds(prevBoard); for (Long item: holdedCardIds) { } } 当我想循环holdedCardIds列表时,我收到: java.lang.ClassCastException:java.lang.Integer不能在这个地方for (Long item: holdedCardIds) { 为java.lang.Long – > for (Long item: holdedCardIds) { 我的getExcludedCardIds()看起来像: @Override public List getExcludedCardIds(Board board) { return boardCardRepository.getExcludedCardIds(board.getId()); } 库: @Repository […]

如何让Spring Data处理多个异构DataSource?

我已成功使用Spring的Accessing Data With JPA教程。 我已经获得了自己的CrudRepository,只需配置一个特定的DataSource @Bean即可自动工作,并且这些内部连接由Spring Data(或Spring Boot管理,很难分辨哪个)。 但是,我无法弄清楚如何让自动化管道来处理第二个DataSource @Bean。 注入第二个会导致自动配置类在启动期间爆炸。 有关如何做到这一点的任何想法? 我为此做的搜索导致文章讨论了多个同类 DataSource用于负载平衡或其他目的,这实际上不是我需要的。 我有多个数据库,其中包含完全独立的内容,我需要将其引入此应用程序中,我真的希望避免因为第二个数据库进入混合而复制所有自动配置。 我希望这很简单,但我担心它在自动配置中是不受支持的边缘情况。

如何使Hibernate @Lock注释适用于Oracle DB?

我偶然发现了Oracle DB中锁定行的问题。 锁定的目的是防止多个事务从数据库读取数据,因为这些数据会影响新数据的生成并且在事务方面会发生变化。 为了进行锁定,我将@Lock注释放在SpringData查找方法上,该方法检索参与事务的数据。 @Lock(LockModeType.PESSIMISTIC_WRITE) User findUserById(@Param(“id”) String operatorId); 实现此代码后,我收到日志消息 org.hibernate.loader.Loader – HHH000444: Encountered request for locking however dialect reports that database prefers locking be done in a separate select (follow-on locking); results will be locked after initial query executes 此外,它没有任何影响和原因 org.springframework.dao.DataIntegrityViolationException: could not execute batch; SQL [insert into …] 使用实体管理器重写锁时可以解决该问题 entityManager.lock(userByIdWithLockOnReadWrite, LockModeType.PESSIMISTIC_WRITE); 要么 entityManager.unwrap(Session.class).lock(userByIdWithLockOnReadWrite, […]

在Spring中实现CrudRepository。 我应该遵循的最佳设计是什么?

我有来自CrudRepository的User Repository扩展,如下所示 public interface UserRepository extends CrudRepository, DatatablesCriteriasRepository DatatablesCriteriasRepository有一个函数需要单独为不同的存储库实现。 所以我创建了这样的存储库实现类。 在impl包中。 public class UserRepositoryImpl implements DatatablesCriteriasRepository 请注意,这只是为了实现DatatablesCriteriasRepository的函数。 我不想覆盖框架中CrudRepository提供的默认function。 但是,如果我这样做,它将更适合代码设计,因为UserRepositoryImpl实际上实现了UserRepository ,顾名思义。 public class UserRepositoryImpl implements UserRepository 但是这又会迫使我扩展UserRepository接口中的所有函数。 如何通过良好的代码设计解决这个问题? UserRepositoryImpl在实现DatatablesCriteriasRepository是否具有此名称?

Spring数据与Mysql JSON类型

我们在项目中使用带有JPA的spring数据。 MySQL服务器版本是5.7。 我有两个问题: 1)spring数据是否与持久化对象兼容到MySQL db上的新JSON类型? 换句话说,我希望有一个实体,而不是在其表中有多个列 – 它将包含一个具有JSON类型的列。 2)Spring数据存储库是否与这种机制兼容? 例如(通过存储库接口自动生成CRUD操作代码)?

Spring Data JPA存储库:派生查询中的IN子句不起作用

我有一个看起来像这样的存储库: public interface UserRepository extends JpaRepository { User findByEmailIgnoreCase(String email); @Query(“select u from User u where u.id in (:ids)”) Set getByIdInSet(@Param(“ids”) Set ids); } 当我调用getByIdInSet我收到以下错误: Caused by: java.lang.IllegalArgumentException: You have attempted to set a value of type class org.eclipse.persistence.indirection.IndirectSet for parameter ids with expected type of class java.lang.Long from query string select u from User […]

在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注入的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 […]