Я пытаюсь отношение между в JPA с помощью встроенной аннотации, но я не смог запустить его успешно,@ElementCollection @CollectionTable в один ко многим картографирование
Вот моя база данных SQL скрипт выглядит следующим образом,
create table TBL_COLLEGE(
id integer primary key generated always as identity (start with 1000, increment by 5),
name varchar(50)
)
create table TBL_COURSE(
Id integer primary key generated always as identity (start with 10, increment by 1),
college_Id integer references TBL_COLLEGE,
name varchar(50)
)
здесь ниже код JPA,
@Embeddable
public class Course {
...
...
..
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="ID")
private Integer courseId;
@Column(name="NAME")
private String courseName;
@Column(name="COLLEGE_ID")
private Integer collegeId;
....
// getter and setter
}
Вот отображение колледжа,
@Entity
@Table(name="TBL_COLLEGE")
public class College implements Serializable{
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="ID")
private Integer collegeId;
...
..
@ElementCollection(targetClass=Course.class,fetch= FetchType.LAZY)
@CollectionTable(name="TBL_COURSE",[email protected](name="COLLEGE_ID"))
private Set<Course> course;
..
// getter and setter
}
Но если я пытаюсь упорствовать колледж с коллекции Курсы набора, это дает мне исключение,
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.entities.Course
....
..
Можете ли вы сказать мне ли мой подход неправилен, Или мое понимание для @CollectionTable является еще минимален, Были я неправильно
Не нужно определить OneToMany аннотацию и т.д .. это достаточно, чтобы удалить ID аннотацию из embedde d класса. Конечно, аннотацию GeneratedValue также следует удалить. – asch
@asch - Это правда, если вы предполагаете, что OP не хочет, чтобы Курсы были объектами первого класса. Учитывая приведенные таблицы, удаление аннотации ID вызовет проблемы. – sharakan
Курсы уже аннотируются как Embeddable, поэтому в любом случае это не Entity (я предполагаю, что вы это подразумеваете под «объектом первого класса») – asch