- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用嵌入式注释在 JPA 中建立关系,但我无法成功运行它,
这里我的数据库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
}
这是学院 map ,
@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",joinColumns=@JoinColumn(name="COLLEGE_ID"))
private Set<Course> course;
..
// getter and setter
}
但是如果我尝试坚持 College with Courses collection set,它给了我一个异常(exception),
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 的理解仍然很少,我错了吗
最佳答案
因为你的两个表都有它们自己的 ID
列,Hibernate 会希望它们都是 @Entity
类型。 @Embeddables
没有自己的 ID
。因此,第一步是将 Course
更改为 @Entity
,以及相应的 @TableName
等。
这导致了第二个问题,即Course
对象的集合不应该是一个@ElementCollection
,它应该是一个@OneToMany
。实体集合,使用 @JoinColumn
指定 COLLEGE_ID
将是来自 TBL_COURSE
的外键。
最后,在 College
中有一个 Course
的集合,在 Course
中有一个 College
id , 你暗示你想要一个 bidirectional association .除其他影响外,您不应在 Course
中拥有学院的 ID
。您应该只拥有 College
引用。如果您不需要从 Course
->College
导航,您可能希望暂时删除它,直到您更好地理解 Hibernate 的对象映射。
关于java - 一对多映射中的@ElementCollection @CollectionTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15409048/
public enum ReportStatus { SUCCCEED, FAILED; } public class Work { @ElementCollection @E
如何使用 JPQL 通过 ElementCollections 查询 JPA 实体,其中 ElementCollection 包含给定元素集中的所有元素? 例如,如果 Node 实体定义了“属性”的
我的目标是克隆实体“产品”及其所有过滤器。 例如,我有一个实体(为简单起见,省略了 getter 和 setter): @Entity public class Product { @Id
我有一个这样声明的“标签”属性: @Entity public class BlogArticle { [...] @ElementCollection(fetch = FetchTy
我有 JavaEE 应用程序并使用 Hibernate 4.3.7.Final。在我的数据库中有两个表:RECHT(包含列:RECHT_RECHTEART(VARCHAR)和GEOB_ID(NUMBE
我想减少 spring 运行的查询量。当通过 SQL 获取带有 @ElementCollection 的对象时,我想直接通过查询中的 JOIN 获取 ElementCollections 的数据。 具
我使用 Hibernate 3.5.6 作为我的 JPA 2.0 实现。我正在尝试在我的实体中构建一个 @ElementCollection(省略了许多字段): @Entity public clas
我有一个包含元素集合的实体类 PositionOrdering: @ElementCollection(targetClass = Position.class, fetch = FetchType.
我有一个多对多关系,它为项目分配标签(除了字符串之外什么都没有): +------+ +------------+ +-------+ | ITEM | | ITEM_LABEL |
我有一个 @Entity命名 Video ,它包含 @ElementCollection标签: @Entity @Table(name = "videos") public class Video {
我试图弄清楚如何使用枚举列表(@ElementCollection)对实体进行 DTO 投影。不幸的是,缺少 QueryDsl 文档,在这里我只能找到版本 3 的结果 不是 适用于版本 4。 @Ent
我有一个具有不同字段的实体: @Entity public class TestEntity { private int id; private String name; pr
给定一个实体产品 @Entity public class Product { private Long id; private List reviews; public Pr
我的数据库中有两个表,如下所示,外键来自 job_label.job_id到 job_record 中的等效列。此外,job_id 的三元组, label_key ,和label在job_record
我有一个具有不同字段的实体: @Entity public class TestEntity { private int id; private String name; pr
我有一个 @ElementCollection @CollectionTable( name = "orgattributes", joinColumns = @JoinColumn(name =
我有一个 User 类,可以有多个登录名: @Entity public class User { @ElementCollection private List logins = new A
对于这个问题,请考虑以下示例: @Entity public class File { public static enum Permission { READABLE, WRITEABLE,
无论如何,我可以在没有这个注释的情况下获得 @ElementCollection 的效果吗?我使用的是 Hibernate 3.3,而 @ElementCollection 和 @Collection
我有以下实体,对此示例进行了简化: @Entity public class Subscription { @Column private String user; @Column
我是一名优秀的程序员,十分优秀!