在另一个实体中多次使用同一个实体

时间:2021-04-26 09:57:00

标签: mysql hibernate jpa spring-data-jpa

我正在使用 JPA 和 Hibernate 实现 Spring Boot 服务器,其中有 2 个实体:ChannelTranslation

Channel 实体有两个字段(nameTranslationsdescriptionTranslations,它们应该以法语和英语两种语言保存频道的名称和描述),它们的类型为 {{1}描述如下:

Translation

Channel

@Entity @Table(name = "CHANNEL") public class Channel { @Id @Column(name = "ID") private String id; @OneToOne(mappedBy = "channel", cascade = CascadeType.ALL) private Translation nameTranslations; @OneToOne(mappedBy = "channel", cascade = CascadeType.ALL) private Translation descriptionTranslations; }

Translation

我的问题是:如何实现前面描述的逻辑,以便在 @Entity() @Table(name = "TRANSLATION") public class Translation { @Id @Column(name = "ID") private String id; @Column(length = 1024) private String en; @Column(length = 1024) private String fr; } 类中有 2 个 Translation 字段?到目前为止,我已经尝试使用 Channel 注释,但它不起作用。

1 个答案:

答案 0 :(得分:0)

我不确定您要实现什么样的映射,但这会起作用:

select
    j.job_id as "Job No",
    c.business_name as "Customer",
    to_char(j.date_created, 'DD/MM/YYYY') as "Created Date",
    to_char(min(sc.start_time), 'DD/MM/YYYY') as "Schedule Start",
    to_char(max(sc.end_time), 'DD/MM/YYYY') as "Schedule End",
    to_char(j.date_due, 'DD/MM/YYYY') as "Due Date"
from sampleco_jobs j
join sampleco_customers c
on j.customer_id = c.customer_id
join sampleco_schedules sc
on j.job_id = sc.job_id
where c.customer_id = 29726
group by j.job_id, c.business_name;

或者,如果您想要其他实体表上的列:

@Entity
@Table(name = "CHANNEL")
public class Channel {
  
    @Id
    @Column(name = "ID")
    private String id;

    @OneToOne(cascade = CascadeType.ALL)
    private Translation nameTranslations;

    @OneToOne(cascade = CascadeType.ALL)
    private Translation descriptionTranslations;
}

参见Hibernate ORM documentation for one-to-one associations