0

我正在尝试使以下类型的映射起作用

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 实例

我已经尝试过 @OneToOne 与 @joincolumns 和 mappedby 属性的关系,但我就是无法让它工作,而且我已经失去了所有逻辑方法的感觉。我对 JPA 实体映射的掌握显然很薄弱。

那么任何人都可以带来一些清晰度吗?

4

2 回答 2

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 也将对链接表进行。

塞巴斯蒂安

于 2012-10-24T13:48:01.067 回答
1

您的表列是各个表event.prodgroupevent.errandtype外键(prodgroup、errandtype)。所以你需要@ManyToOne关联(因为许多事件可能共享一个prodgroup 或errantype)。

于 2012-10-24T13:47:58.030 回答