【问题标题】:JPA - How to represent multi value field in entityJPA - 如何在实体中表示多值字段
【发布时间】:2017-09-12 21:59:41
【问题描述】:

我在决定如何在 JPA 的“电影”实体中表示“ReleaseDate”字段时遇到问题。以this movie 为例。类字段看起来像这样:

@Entity
public class Movie {
   private Long id;
   private String name;
   private Director director;
   private List<Writer> writers;
   private List<Actor> actors;
   private List<ReleaseDate> releaseDates;
}

//@Entity ?
class ReleaseDate {
    private String northAmericanReleaseDate;
    private String europeanReleaseDate;
    private String asianReleaseDate;
    // add more locations here
}

如果电影可以有多个发行日期,我不太确定如何表示它们。以上是我目前所拥有的,如果一部电影没有在某个位置上映,它将为空,这意味着没有在该位置上映。

更大的问题是,我认为 ReleaseDate 不应该是一个实体/类,因为我认为它不保证表中的一行具有它自己的 ID。这里最好的策略是什么?谢谢。

【问题讨论】:

  • 首先,您应该使用id,而不是Id。其次,您应该使用 LocalDate 来表示日期,而不是字符串。关于您的问题,您应该改用 Map 或 Set,其中 LocationReleaseDate 将是具有 Location 和 LocalDate 的实体(或 Embeddable)。
  • Embeddable 可能是我所追求的。谢谢。

标签: java hibernate jpa


【解决方案1】:

我认为数据模型不正确(您的问题与 JPA 无关)。也许我错了,但我认为,发行日期与电影和大陆(欧洲、美洲、亚洲)或任何其他地理位置有关,对吗?那么事件Release 应该是一个包含电影、日期、位置/大陆、国家等成员的实体。 (电影和位置应该是唯一的)。

只有一个发布日期和每个位置一个成员字段,让它们为空是没有意义的。相反,位置应该是通用的。

【讨论】:

  • 它确实与 JPA 有关,因为它归结为我如何在表中表示实体。
  • 是的,但我的意思是技术上数据模型的架构是一个问题,持久化的技术解决方案是另一个问题。这里的问题不是 JPA 的任何技术问题,而是如何设计数据模型的问题。然后可以通过文件持久化,mongoDb,jdbc,或者JPA,没关系。
【解决方案2】:
enum ReleaseLocation {
  NorthAmerica, Europe, Asia;
}

class ReleaseDate {
  private String releaseDate;
  private ReleaseLocation releaseLocation;
}

这样的事情呢?

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 2018-08-24
    • 2021-07-12
    • 2018-04-26
    • 2020-05-11
    • 2013-01-04
    • 2017-08-22
    • 1970-01-01
    • 2021-10-27
    相关资源
    最近更新 更多