当前位置: 首页 > 面试题库 >

如何使用JPA /休眠创建索引,以及如何使用MappedSuperClass中的字段以及具体实体中的字段

端木元青
2023-03-14
问题内容

我有@MappedSuperClass(简化示例):

@MappedSuperclass
public abstract class MySuperClass {

    @Id
    @GeneratedValue
    private long id;

    @Column(nullable = false)
    private Date creationDate;

    // ...
}

和一个具体的Entity(简化示例):

@Entity
public class MyEntity extends MySuperClass {
    @Index(name = "IDX_MYINDEX")
    @Column(nullable = false)
    @Enumerated(EnumType.STRING)
    private MyType type;

    @Index(name = "IDX_MYINDEX")
    @Column(nullable = false)
    @Enumerated(EnumType.STRING)
    private MyResult status;

    // ...
}

现在我需要包括列的索引MySuperClass.creationDateMyEntity.statusMyEntity.type

如果我添加@Index(name = "IDX_MYINDEX")MySuperClass.creationDatehibernate中,则会creationDate向继承自的每个Entity
添加一个索引MySuperClass

我试过了,@AttributeOverride但是它不能用于索引。

有任何想法吗?


问题答案:

如果正在使用,JPA 2.1则可以将类注释@Table及其属性索引一起使用

@Table(indexes = { @Index(name = "IDX_MYIDX1", columnList = "id,name,surname") })

请注意,如文档所述

仅当表生成有效时才使用它们。默认为无其他索引。

columnlist,如上所示,接受列名列表作为逗号分隔的列表。

如果您不使用JPA 2.1,则可以使用old
Hibernate@Index注释(请注意,此注释已被弃用)。有一个属性columnNames,无论在哪个字段上方声明,都可以传递列名称数组。

@Index(name = "IDX_MYIDX1", columnNames = { "id", "name", "surname"})


 类似资料:
  • 问题内容: 我有两个JPA实体:和。延伸。两者之间存在ManyToMany关系,并被描述为 “一个VirtualLot可以包含VirtualFiles” 和 “一个VirtualFile可以与多个VirtualLots关联” 。实体定义如下: 在这里,我要总结使用弹簧数据JPA库包含在一个给定的VirtualLot的VirtualFiles的大小:。该查询定义如下: 我的问题是Hibernate

  • 问题内容: 考虑以下层次结构,其中包含实体并扩展了抽象超类: 和 和 我需要通过搜索Widget ,但我不知道我在运行时要搜索的Widget的具体类型。什么是正确的搜索窗口小部件的方式,例如,如果是的,则返回的实例,依此类推? 我试图在DAO中使用a ,但收到一个错误消息,告诉我我无法实例化一个抽象类,这很有意义,但是我认为持久性提供程序会知道如何在具体的子实体表中查找和返回正确的实例。我可以做到

  • 问题内容: 我为Hibernate / JPA配置问题感到困惑,该问题阻止了我的带有JPA注释的实体自动注册: 在我的实体课程中,我有: 在MySQL中,语言表如下所示: 我的persistence.xml看起来像: 编辑 :这是我获取EntityManager并保持的方式: 问题答案: 事实证明这很简单:直接在persistence.xml文件中列出这些类。armandino和MikelRasc

  • 我在SQL服务器数据库中有表用户,有近30列。我还为相应的数据库表创建了一个JPA实体。JPA实体如下所示: 现在我正在尝试创建一个本机查询,它只会从用户表中获取id和name。Repository类看起来像这样。 现在,当它被执行时,它会抛出一个异常,如下所示: 当我将地址列添加到我的查询时,这个异常会消失,但它会出现在另一个字段中。 所以,现在我想修改JPA实体,使这个字段成为可选的。我试过使

  • 我有一个实体,它有一个Map ElementCollection字段。我知道使用Jpa,您可以在类级别上使用@Index注释为常规字段定义索引。问题是我的地图元素集合字段创建了一个不是由@Entity注释类创建的连接表。所以我不能使用@Index注释。有没有Jpa/Hibernate方法来定义这个连接表中字段的索引,或者我必须手动定义它们?这是地图字段。 谢谢

  • 用户Spring批处理查找实体表。问题是关于ItemWriter,或者,可能是关于ItemProc的。 对于这个实体,一切都很好。我可以从源代码中读取实体,并将其保存到用户_导出表中 我有一个: 2)比,我在我的实体用户添加字段。这个字段是列表,我需要将这个字段保存在其他表Device_Export中。 我有两个表格用户导出和设备导出。设备导出具有用户导出的外键,并且关系是多个设备与一个用户的关系