Java 从两个表创建一个引用表
我将我的站点转换为使用JavaEE和hibernate 我有三张桌子:Java 从两个表创建一个引用表,java,hibernate,jakarta-ee,Java,Hibernate,Jakarta Ee,我将我的站点转换为使用JavaEE和hibernate 我有三张桌子: 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=
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 |
+---+-------+-----------+-------+
非常感谢你的帮助 似乎没有直接的方法将表映射到hibernate(至少我不知道) 使用继承可以产生类似的效果
Movie
和Game
可以是另一个类的子类(比如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;
}
@Entity
@Table(name = "likable")
@Inheritance(strategy=InheritanceType.JOINED)
public class Likable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "id")
private int id;
}
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;
}
@Entity
@Table(name = "likable")
@Inheritance(strategy=InheritanceType.JOINED)
public class Likable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "id")
private int id;
}
电影
课程:
@Entity
@Table(name="movie")
@PrimaryKeyJoinColumn(name="id")
public class Movie extends Likable {
private String title;
private int duration;
}
@Entity
@Table(name="videoGame")
@PrimaryKeyJoinColumn(name="id")
public class Game extends Likable {
private String title;
private int nbPlayer;
}
和游戏
课程:
@Entity
@Table(name="movie")
@PrimaryKeyJoinColumn(name="id")
public class Movie extends Likable {
private String title;
private int duration;
}
@Entity
@Table(name="videoGame")
@PrimaryKeyJoinColumn(name="id")
public class Game extends Likable {
private String title;
private int nbPlayer;
}