spring - 在具有 Inheritancetype.TABLE_PER_CLASS 的实体上使用 JPARepository 会导致错误查询
问题描述
我使用继承类型“TABLE_PER_CLASS”在我的项目中定义了 2 个实体。之后,我定义了 2 个存储库来访问数据,但是,当我使用它们查找 B 实体的记录时,生成的查询不包含 JOIN 语句,而仅包含“SELECT id, name, alternate_name from b”,它失败了,因为“名称”字段不存在。
我错过了什么我看不到的东西吗?
实体 A:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = "a")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public abstract class A implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
@Column(name = "name")
private String name;
...
...
}
实体 B:
@Entity
@Table(name = "b")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class B extends A implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
@Column(name = "alternate_name")
private String alternateName;
...
...
}
基础存储库:
@SuppressWarnings("unused")
@NoRepositoryBean
public interface BaseRepository<T extends A> extends JpaRepository<T, Long> {
}
存储库:
@SuppressWarnings("unused")
@Repository
public interface ARepository extends BaseRepository<A> {
}
B存储库:
@SuppressWarnings("unused")
@Repository
public interface BRepository extends BaseRepository<B> {
}
解决方案
我假设你有一个表 a 和一个表 b。
但是 TABLE_PER_CLASS 只会为每个具体子类生成/使用一个表。在你的情况下只是表b。
如果您想要表 a 和 b,则必须使用 JOINED 策略。
推荐阅读
- javascript - 如何对这样格式的数组进行排序?
- generics - Kotlin:构造函数中可变参数的可变参数
- .htaccess - 您如何将 google 客户端 ID 从一个页面传递到另一个页面?
- c++ - 如何使用 OpenCV (c++) 存储序列中的所有帧?
- python - 为什么 matplotlib 会改变显示图像中的颜色强度?
- react-native - React Native 无限重复图像动画不同步
- python - setuptools 已安装,但我无法导入它
- javascript - 为映射的 true 或 false 值的集合返回 true/false
- migration - CircleCI 错误将配置迁移到版本 2
- regex - 如何在没有查询的情况下剥离 href 属性?