首页 > 解决方案 > 在另一个实体中多次使用同一个实体

问题描述

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

Channel实体有两个字段(应该包含法语和英语两种语言的频道名称和描述),其类型nameTranslations如下所述:descriptionTranslationsTranslation

班级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?到目前为止,我已经使用@OneToOne注释进行了尝试,但它不起作用。

标签: mysqlhibernatejpaspring-data-jpa

解决方案


我不确定您要实现哪种映射,但这会起作用:

@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;
}

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

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

    @OneToOne(mapped="name", cascade = CascadeType.ALL)
    private Translation nameTranslations;

    @OneToOne(mapped="description", cascade = CascadeType.ALL)
    private Translation descriptionTranslations;
}

@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;

    @OneToOne
    private Channel name;

    @OneToOne
    private Channel description;
}

有关一对一关联,请参阅Hibernate ORM 文档。


推荐阅读