我正在尝试使用以下类型的映射
Table event has the following columns:
id (PK)
prodgroup
errandtype
table errandtype : errandtype
table prodgroup: prodgroup
我有相应的JPA课程
@Entity
@Table(name="event")
public class MyEvent {
@Id
int id;
// what mapping should go here?
Prodgroup prodgroup;
// what mapping should go here?
ErrandType errandtype;
}
@Entity
public class Prodgroup {
@Id
private String prodgroup;
}
@Entity
public class ErrandType {
@Id
private String errandtype;
}
好的,所以问题在代码中被标记为注释,但无论如何我都会尝试显式。
在上面的例子中,我想将MyEvent类中的Prodgroup和ErrandType字段设置为相应的Prodgroup和Errandtype实例
我已经尝试了与@joincolumns和mappedby属性的@OneToOne关系,但我无法让它工作,我已经失去了所有的逻辑方法感。我对JPA实体映射的掌握显然很弱。
那么有人能说清楚吗?
答案 0 :(得分:3)
应该是:
@Entity
@Table(name="event")
public class MyEvent {
@Id
int id;
// what mapping should go here?
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "prodgroup_id", insertable = true, updatable = true)
Prodgroup prodgroup;
// what mapping should go here?
@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "errandtype_id", insertable = true, updatable = true)
ErrandType errandtype;
}
@Entity
public class Prodgroup {
@Id
private String prodgroup;
}
@Entity
public class ErrandType {
@Id
private String errandtype;
}
FetchType Eager表示将始终加载对象(如果未指定,则默认为“Lazy”)。
CascadeType.ALL表示也会对链接表进行mearge / persist / remove。
塞巴斯蒂安
答案 1 :(得分:1)
您的表列event.prodgroup
和event.errandtype
是各个表的外键(prodgroup,errandtype)。因此,您需要@ManyToOne关联(因为许多事件可能共享一个prodgroup或错误类型)。