Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JPA/hibernate创建索引,并将MappedSuperClass中的字段与具体实体中的字段一起使用_Java_Hibernate_Jpa - Fatal编程技术网

Java 如何使用JPA/hibernate创建索引,并将MappedSuperClass中的字段与具体实体中的字段一起使用

Java 如何使用JPA/hibernate创建索引,并将MappedSuperClass中的字段与具体实体中的字段一起使用,java,hibernate,jpa,Java,Hibernate,Jpa,我有@MappedSuperClass(简化示例): 以及具体的实体(简化示例): 现在我需要一个索引,包括MySuperClass.creationDate、MyEntity.status和MyEntity.type列 如果我将@Index(name=“IDX_MYINDEX”)添加到MySuperClass.creationDatehibernate将creationDate的索引添加到从MySuperClass继承的每个实体 我尝试了@AttributeOverride,但它不能用于索引

我有
@MappedSuperClass
(简化示例):

以及具体的
实体
(简化示例):

现在我需要一个索引,包括
MySuperClass.creationDate
MyEntity.status
MyEntity.type

如果我将
@Index(name=“IDX_MYINDEX”)
添加到
MySuperClass.creationDate
hibernate将
creationDate
的索引添加到从
MySuperClass
继承的每个实体

我尝试了
@AttributeOverride
,但它不能用于索引


有什么想法吗?

如果您使用的是
JPA2.1
,那么您可以使用带有属性索引的类注释
@Table

@Table(indexes = { @Index(name = "IDX_MYIDX1", columnList = "id,name,surname") })
请注意,如文档所示

仅当表格生成生效时才使用这些选项。默认为no 附加索引

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

如果您不使用JPA2.1,您可以只使用旧的
Hibernate
s
@Index
注释(注意,此注释已被弃用)。这里有一个属性
columnNames
,您可以在其中传递列名数组,而不管它声明在哪个字段之上

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

使用@Index注释并使用参数“columnList”设置应使用哪些列来创建索引。该列表应由以逗号分隔的列名值列表组成


重要提示:不要忘记将列名属性(通过列注释)添加到构成此索引的所有属性中,否则在启动容器时会出现错误。

请确保列出在@column的name属性中给定的列名,而不是字段名

@Table(name = "table_name",indexes = [Index(name = "name_of_index", columnList = "liste of fields separated by ',' ")])
同时启用ddl自动更新将创建所有索引

spring.jpa.hibernate.ddl auto=update

@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "ANSWER_OPTION", indexes = {@Index(name="SEC_INDEX",columnList = "ID,SEQUENCE,QUESTION_ID,OPTION_TITLE")})
public class AnswerOptionEntity {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(name = "SEQUENCE")
private Long sequence;

@Column(name = "OPTION_TITLE")
private String optionTitle;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "QUESTION_ID", nullable = false)
@JsonIgnore
private QuestionEntity questionEntity;

@OneToMany(mappedBy = "answerOptionEntity", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIgnore
private List<ResultEntity> resultEntityList = new ArrayList<>();
@Getter
@塞特
@建筑商
@AllArgsConstructor
@诺尔格构装师
@实体
@表(name=“ANSWER\u OPTION”,Index={@Index(name=“SEC\u Index”,columnList=“ID,SEQUENCE,QUESTION\u ID,OPTION\u TITLE”))
公共类回答选项{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私人长id;
@列(name=“SEQUENCE”)
私有长序列;
@列(name=“OPTION\u TITLE”)
私有字符串optionTitle;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“QUESTION\u ID”,null=false)
@杰索尼奥雷
私人问题实体问题实体;
@OneToMany(mappedBy=“answerOptionEntity”,fetch=FetchType.LAZY,cascade=CascadeType.ALL,orphan=true)
@杰索尼奥雷
私有列表resultEntityList=新的ArrayList();

}

我曾尝试在具有Column name属性的字段上添加列注释,但在启动容器时仍然出现错误,即键值太长。你能帮我吗help@emphywork我认为您需要缩短索引中使用的字段的长度,这可以通过
@列(length=…)
注释指定。
@Table(name = "table_name",indexes = [Index(name = "name_of_index", columnList = "liste of fields separated by ',' ")])
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "ANSWER_OPTION", indexes = {@Index(name="SEC_INDEX",columnList = "ID,SEQUENCE,QUESTION_ID,OPTION_TITLE")})
public class AnswerOptionEntity {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(name = "SEQUENCE")
private Long sequence;

@Column(name = "OPTION_TITLE")
private String optionTitle;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "QUESTION_ID", nullable = false)
@JsonIgnore
private QuestionEntity questionEntity;

@OneToMany(mappedBy = "answerOptionEntity", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
@JsonIgnore
private List<ResultEntity> resultEntityList = new ArrayList<>();