【问题标题】:Hibernate mapping on non-unique column one to Many Mapping非唯一列一到多映射上的休眠映射
【发布时间】:2019-09-15 04:19:39
【问题描述】:

我有两张桌子

Person
   id --> PK
   name
   media_id

Media
  id --> PK
  media_id
  other_details

Media.Media_id 会有重复的值

现在我想将所有媒体记录加载到具有给定媒体 ID 的人身上

public class Person{

    @Id
    private id;

    private String name;

    @OneToMany  (**Want to map using MEDIA ID**)
    private List<Media> media= new ArrayList<>();

}

Person to Media 是单向的,想知道怎么做这个映射

【问题讨论】:

  • 那么人和媒体是一对多的吗?而 Media.media_id 应该是 media.person_id ?是错字吗?如果不是,那很有可能,因为 Media 有两列,一列称为 id,另一列称为 media_id.....

标签: java database hibernate


【解决方案1】:

这不是 oneToMany 关系。你可以像这样使用@Formula

public class Person{

@Id
private id;

private String name;

private int media_Id // Add a mediaId field to refer to it in the formula

@Transient
@Formula("SELECT * FROM MEDIA WHERE MEDIA_ID = media_Id")
private List<Media> media= new ArrayList<>();

}

【讨论】:

  • 出现错误,org.hibernate.MappingException:无法确定类型:java.util.List,在表:PLAYER,列:[org.hibernate.mapping.Formula(SELECT * FROM MEDIA WHERE MEDIA_ID = MEDIA_ID )]
  • @OneToMany @Formula("SELECT * FROM MEDIA WHERE MEDIA_ID = MEDIA_ID") private List&lt;Media&gt; media= new ArrayList&lt;Media&gt;();
  • 如果“@OneToMany”解决了这个问题,我猜你有一个中间表 Person_Media。我尝试了一个类似的案例,但不想将该人分配的媒体存储在数据库中,所以我在媒体列表中添加了“@Transient”。这修复了异常。
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多