java - 具有 @DiscriminatorValue 的多个对象的单个存储库
问题描述
@DiscriminatorValue
我有几个实体与一个基类共享同一个数据库表:
@Entity(name = "base_details")
@DiscriminatorColumn(name = "type")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Getter
@Setter
public abstract class BaseDetails {
@Id
@Column(name = "identifier")
private String identifier;
@Column(name = "item_type")
@Enumerated(EnumType.STRING)
private Type type;
}
@Entity
@DiscriminatorValue("ONE")
@Getter
@Setter
public class FirstDetails extends BaseDetails {
...
}
@Entity
@DiscriminatorValue("TWO")
@Getter
@Setter
public class SecondDetails extends BaseDetails {
...
}
这工作正常,但我遇到了一个有太多独立存储库的问题:
@Repository
public interface OneDetailsRepository extends JpaRepository<OneDetails, String> { ... }
等等
有没有办法拥有一个BaseDetailsRepository
可以与所有派生实体一起使用的单一存储库(eq.)?
编辑:我正在寻找的是这样的:
@Repository
public interface BaseDetailsRepository extends JpaRepository<? extends BaseDetails, String> {
OneDetails findOne(String identifier);
SecondDetails findOne(String identifier);
}
解决方案
@NoRepositoryBean // Read only repository
public interface BaseDetailsRepository<T extends BaseDetails>
extends JpaRepository<T, String> {
T findOne(String identifier);
T findOne(Long id);
Iterable<T> findAll();
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
您还可以为每个实体拥有三个存储库:
@Transactional
public interface BaseRepository extends BaseDetailsRepository<BaseDetails> { }
@Transactional
public interface FirstDetailsRepository extends BaseDetailsRepository<BaseDetails>,JpaRepository<T extends BaseDetails, String>{ }
@Transactional
public interface SecondDetailsRepository extends BaseDetailsRepository<BaseDetails>,JpaRepository<T extends BaseDetails, String> { }
推荐阅读
- javascript - jqueryUI 关闭挂起
- flutter - 如何显示 sqflite 表中的项目
- typescript - 您如何从现有类型中引用类型?
- r - R Shiny Dygraph 错误:传递给参数“数据”的类型不受支持
- performance - 哪个使用更少的资源:N 个浏览器选项卡或 1 个选项卡中的 N 个 iframe?
- node.js - 我是否需要一个框架来部署 Postgres + Express + React + Node 应用程序
- ios - 为 Mac 目标构建 iOS 应用程序 - 应用程序在显示下拉/导航表后停止响应
- python - 当我插入管理员或角色时,我得到'在此声明性基础的注册表中找到路径“用户日志”的多个类'?
- javascript - 如何使用 sinon 将同一个方法替换为两个不同的返回值?
- java - Java 中的泛型无法编译