gpt4 book ai didi

java - Hibernate 错误或不正确的映射(这可能表明 Hibernate 中存在错误 - 错误)?

转载 作者:行者123 更新时间:2023-11-30 02:54:36 25 4
gpt4 key购买 nike

当我运行以下程序时,出现以下异常:

ERROR: HCANN000002: An assertion failure occurred (this may indicate a bug in Hibernate) org.hibernate.annotations.common.AssertionFailure: Declaring class is not found in the inheritance state hierarchy: com.online.tutorial.elementCollection.map.LanguageStatement5

我运行下面的JUnit :

public class QuestionDataSetup5 {

@Test
public void testQuestionDataSetup(){
String hindiString = new String("Hindi");
String englishString = new String("English");
String chineseString = new String("chinese");

LanguageStatement5 hindiStatement = new LanguageStatement5("बिल गेट्स के जन्म की तारीख क्या है");
LanguageStatement5 englishStatement = new LanguageStatement5("What is the date of Birth of Bill Gates");
LanguageStatement5 ChineseStatement = new LanguageStatement5("什么是比尔·盖茨出生日期");

Map<String, LanguageStatement5> questionMap5 = prepareMap(hindiString, englishString, chineseString, hindiStatement, englishStatement, ChineseStatement);

Question5 dateOfBirthQuestion5 = new Question5(10, questionMap5);

EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("NewPersistenceUnit");
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();

entityManager.persist(hindiStatement);
entityManager.persist(englishStatement);
entityManager.persist(ChineseStatement);

entityManager.persist(dateOfBirthQuestion5);

entityManager.getTransaction().commit();
}

private Map<String, LanguageStatement5> prepareMap(String hindiString, String englishString, String chineseString, LanguageStatement5 hindiStatement, LanguageStatement5 englishStatement, LanguageStatement5 chineseStatement) {
Map<String, LanguageStatement5> questionMap5 = new HashMap<String, LanguageStatement5>();
questionMap5.put(hindiString, hindiStatement);
questionMap5.put(englishString, englishStatement);
questionMap5.put(chineseString, chineseStatement);
return questionMap5;
}
}

POJO类(class):

package com.online.tutorial.elementCollection.map;

import javax.persistence.*;
import java.util.Map;
import java.util.TreeMap;

@Entity
@Table(name = "Question5")
public class Question5 {

@Id
@SequenceGenerator(name = "question_sequencer_generator", sequenceName = "question_sequencer" , initialValue = 10, allocationSize = 50)
@GeneratedValue(generator = "question_sequencer_generator", strategy = GenerationType.SEQUENCE)
@Column(name = "question_id")
private Long questionId;

@Column(name = "Max_Marks")
private int maxMarks;

@ElementCollection
@CollectionTable(name = "IMAGE")
@MapKeyJoinColumn(name = "LANGUAGE_REF_ID")
/* @JoinTable(name = "QUESTION_STATEMENT_MAPPING",
joinColumns = @JoinColumn(name = "QUESTION_REF_ID"),
inverseJoinColumns = @JoinColumn(name = "STATEMENT_REF_ID")) */
private Map<String, LanguageStatement5> languageNameToQuestionMap = new TreeMap<String, LanguageStatement5>();

public Question5() {
}

public Question5(int maxMarks, Map<String, LanguageStatement5> languageNameToQuestionMap) {
this.maxMarks = maxMarks;
this.languageNameToQuestionMap = languageNameToQuestionMap;
}

public Long getQuestionId() {
return questionId;
}

public void setQuestionId(Long questionId) {
this.questionId = questionId;
}

public int getMaxMarks() {
return maxMarks;
}

public void setMaxMarks(int maxMarks) {
this.maxMarks = maxMarks;
}

public Map<String, LanguageStatement5> getLanguageNameToQuestionMap() {
return languageNameToQuestionMap;
}

public void setLanguageNameToQuestionMap(Map<String, LanguageStatement5> languageNameToQuestionMap) {
this.languageNameToQuestionMap = languageNameToQuestionMap;
}
}

另一个 POJO 类:

package com.online.tutorial.elementCollection.map;

import javax.persistence.*;

@Embeddable
public class LanguageStatement5 {

@Id
@SequenceGenerator(name = "statement_sequencer_generator", sequenceName = "statement_sequencer" , initialValue = 10, allocationSize = 50)
@GeneratedValue(generator = "statement_sequencer_generator", strategy = GenerationType.SEQUENCE)
@Column(name = "statement_id")
private Long statementId;


@Column(name = "statement")
private String statement;

public LanguageStatement5() {
}

public LanguageStatement5(String statement) {
this.statement = statement;
}

public String getStatement() {
return statement;
}

public void setStatement(String statement) {
this.statement = statement;
}
}

Pom.xml 文件:

<dependencies>

<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc14</artifactId>
<version>14</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.1-api -->
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>

<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.2.Final</version>
</dependency>

<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.2.Final</version>
</dependency>

<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.2.Final</version>
</dependency>

<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-annotations -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-annotations</artifactId>
<version>3.5.6-Final</version>
</dependency>

<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.5.4-Final</version>
<type>pom</type>
</dependency>

<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-ehcache -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>4.3.2.Final</version>
</dependency>

<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>4.3.2.Final</version>
</dependency>

<!-- http://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

最佳答案

如果 LanguageStatement5 是一个实体类型 - 正如 @Id 建议的那样,并且您正在尝试直接使用实体管理器保存其实例 - 应该声明它因此:您应该使用 @Entity 注释它,而不是使用 @Embeddable。后者用于保存由其他实体“拥有”并且没有自己的生命周期和标识(@Id)的类。这也意味着您必须将 Question5languageNameToQuestionMap 属性的映射从 @ElementCollection 更改为 @OneToMany .

或者,如果 LanguageStatement5 在概念上确实是一个嵌入式实体,则您不应尝试保留这些实例。只需调用 entityManager.persist(dateOfBirthQuestion5);,JPA 就会负责持久保存语言语句对象。这应该是代码中对 persist 的唯一调用。在这种情况下,您还应该从 LanguageStatement5 中删除 @SequenceGenerator@Id

关于java - Hibernate 错误或不正确的映射(这可能表明 Hibernate 中存在错误 - 错误)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37638404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com