- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在搜索从@MappedSuperclass 扩展的实体时遇到了问题。我创建了一个类 PhoneBook 并从中扩展了 2 个实体:FirstPhoneBook 和 SecondPhoneBook。结构如下所示:
@MappedSuperclass
public abstract class PhoneBook {
...
@Entity
@Table(name = "first_phone_book")
public class FirstPhoneBook extends PhoneBook {
...
@Entity
@Table(name = "second_phone_book")
public class SecondPhoneBook extends PhoneBook {
...
这些表绝对相似。我描述了 PhoneBook 类中的所有字段,子类中只有默认构造函数。外部系统发送电话号码作为参数。根据表格是否包含此类数字,我的系统会用一个词进行响应。
问题是:如何在不对每个子类名称进行硬编码的情况下,在从@MappedSuperclass 扩展的每个表中单独搜索?
我只能找到这样的按值搜索的变体:
currentSession.get(Employee.class, theId);
但是有对实体类的显式调用。我希望它是可扩展的,而不需要为每个添加的新实体编写新的 DAO。当前方法签名如下所示:
public <T extends PhoneBook> T findByNumber(String number);
最佳答案
您描述的是多态查询,即引用父类的查询。 Hibernate documentation说这在使用 @MappedSuperclass
继承时没有得到很好的支持:
Because the
@MappedSuperclass
inheritance model is not mirrored at the database level, it’s not possible to use polymorphic queries referencing the@MappedSuperclass
when fetching persistent objects by their base class.
如果经常使用多态查询,最好使用table per class继承策略:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class PhoneBook {
...
@Entity
@Table(name = "first_phone_book")
public class FirstPhoneBook extends PhoneBook {
...
@Entity
@Table(name = "second_phone_book")
public class SecondPhoneBook extends PhoneBook {
...
然后您可以使用父类(super class)获取实体:
PhoneBook phoneBook = currentSession.get(PhoneBook.class, theId);
Hibernate 通常会使用 UNION 对两个表进行查询。
也就是说,即使使用 @MapperSuperclass
,Hibernate 仍然可以查询所有表以查找扩展父类的类。您可以使用以下 JPA 查询(请注意,它使用父类的完全限定类名):
Query<PhoneBook> query = currentSession.createQuery("from " + PhoneBook.class.getName() +
" where id = :id", PhoneBook.class);
query.setParameter("id", theId);
不同的是,这里查询的不是实体,而是扩展父类的所有类。同样在这种情况下,与每个类一个表的策略不同,Hibernate 不会使用 UNION,而是向每个表发送一个查询,在这种情况下是两个单独的 SQL 查询,而不是一个。
关于java - 搜索从@MappedSuperclass 扩展的所有表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66026613/
在 JPA/Hibernate 中,像 BetterBaseEntity 这样的映射父类(super class)可以是另一个映射父类(super class) BaseEntity 的子类吗? 我想
我在 Symfony 5 中与 MappedSuperclass 的多对一关系存在问题。我有实体 Employee、Employer,它扩展了 MappedSuperclass 抽象类 Person。
伙计们! 如果我定义一个实体类并用 @MappedSuperclass 注释它和一个 @EntityListener ,在子类中是否还会调用监听器来处理生命周期事件? 例子: @MappedSuper
我在搜索从@MappedSuperclass 扩展的实体时遇到了问题。我创建了一个类 PhoneBook 并从中扩展了 2 个实体:FirstPhoneBook 和 SecondPhoneBook。结
我有一个映射父类(super class) @MappedSuperclass public class A{ . . . @Column(name="somethin
我想知道是否有办法在继承 MappedSuperClass 的子类中更改(或定义内部)注释,例如,假设我们有一个类 BaseUser(mappedsuperclass),一个子类 User :
我有一些表有一些公共(public)列,我认为在创建实体时我会让实体扩展一个定义了所有映射的类: @MappedSuperclass public class AbstractLogMaster im
假设我有一个 JPA 实体: @Entity @Table(name = "PARENT") public class Parent { // ... } 有没有办法,也许是特定于 Hiber
我正在努力创建一些抽象类来抽象每个实体将共享的属性,例如 ID。 我创建了一个 AbstractModel 类,如下所示。 import javax.persistence.*; import jav
我想与双方的同一个表创建ManyToMany关系。它应该代表两个用户之间的友谊。我现在有用户类别: @Entity @Table(name = "Users") public class User e
我的 Web 应用程序中有几个领域模型类,它们之间存在层次关系。其中一个例子是用于对用户帖子进行分类的分层类别结构。 有一些与这些类的层次结构相关的逻辑是常见的。因此,我尝试将逻辑移动到通用的 @Ma
问题 我有一个名为 Data 的 @MappedSuperclass 作为我数据库中每个实体的父级。它包含 Id 等公共(public)属性。然后我有一个扩展 Data 的实体,由于其子类的公共(pu
我有一个摘要TemporalModel向所有扩展模型添加 created 和 updated 字段的类(用 @MappedSuperclass 注释)。我想给它添加一个 getLatest() 静态方
我需要关联 @OneToMany 从 Country 到父类(super class) Place (@MappedSuperclass)。它可以是双向的。我需要像 @OneToAny 这样的东西。
有: @MappedSuperclass class Superclass { @Id @Column(name = "id") protected long id;
我有一个场景,我需要使用 Doctrine 的 MappedSuperclass 功能(使用 Symfony2),并在一些父类(super class)列上创建一个唯一约束。比方说: use Doct
我将 JPA2 与 Hibernate 一起使用,并尝试为我的实体引入一个公共(public)基类。到目前为止,它看起来像这样: @MappedSuperclass public abstract c
我可以在父类和子类中定义相同的 JPA 回调方法吗?如果是,我是否需要调用 super.onPrePersist();在子类的 onPrePersist() 方法中? @MappedSuperclas
我正在使用 JPA 2.0 和 EclipseLink 2.2.0。 我有一个 @MappedSuperclass,AbstractEntity,它是我所有提供 PK 和审计列的实体的基础。 我想让另
@MappedSuperclass public abstract class AbstractBaseModel{ } @MappedSuperclass public class Person e
我是一名优秀的程序员,十分优秀!