【问题标题】:create a reference table from two tables从两个表创建一个引用表
【发布时间】:2018-09-12 21:49:11
【问题描述】:

我将我的网站转换为使用 Java EE 和休眠!

我有 3 张桌子:

like
id | table | idElement | userId

movie
movie_id | title | duration

videoGame
game_id | title | nbPlayer

目前有 2 个班级:

@Entity
@Table(name="movie")
public class Movie {

    @Id
    @GeneratedValue
    @Column(name="movie_id")
    private Integer id;
    private String title;
    private int duration;

@Entity
@Table(name="videoGame")
public class Game {

    @Id
    @GeneratedValue
    @Column(name="game_id")
    private Integer id;
    private String title;
    private int nbPlayer;

我不知道如何让我的表格“喜欢”以将其链接到两个表格之一和正确的 id?

示例:

table like:
+---+-------+-----------+-------+
|id | table | idElement | userId|
|1  | movie |  1        | 1     |
|1  | game  |  5        | 3     |
+---+-------+-----------+-------+

非常感谢您的帮助!

【问题讨论】:

    标签: java hibernate jakarta-ee


    【解决方案1】:

    看起来没有直接的方法可以将您的表映射到休眠状态(至少我不知道)。

    使用继承可以产生类似的效果。 MovieGame 可以是另一个类的子类(比如 Likable)。这样您就可以使用Likable 类,如下所示:

     @Entity
     @Table(name="like")
     public class Like {
    
       @Id
       @GeneratedValue
       @Column(name="like_id")
       private Integer id;
    
       @ManyToOne
       @JoinColumn(name="likable_id", nullable=false)
       private Likable likable;
    
       @ManyToOne
       @JoinColumn(name="user_id", nullable=false)
       private User user;
    }
    

    Likable 类将如下所示:

    @Entity  
    @Table(name = "likable")  
    @Inheritance(strategy=InheritanceType.JOINED)   
    public class Likable {  
    
       @Id  
       @GeneratedValue(strategy=GenerationType.AUTO)     
       @Column(name = "id")  
       private int id;  
    
     }
    

    Movie类:

     @Entity
     @Table(name="movie")
     @PrimaryKeyJoinColumn(name="id")  
     public class Movie extends Likable {
    
         private String title;
        private int duration;
    }
    

    还有Game类:

    @Entity
    @Table(name="videoGame")
    @PrimaryKeyJoinColumn(name="id")
    public class Game extends Likable {
    
       private String title;
       private int nbPlayer;
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-29
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 2011-09-21
      相关资源
      最近更新 更多