我有一个奇怪的数据库设置,我想用hibernate进行映射,有一个表
user
和一个表post
,它们之间有多对多的关系,但这种关系是通过一个连接表完成的,它引用了 user
的主键,但不是 post
的主键,它引用了该表的非唯一列。
我设法使用
@ManyToMany()
和下面的代码来映射它,它似乎有效,但我想知道引用非唯一列是一件好事还是我不应该这样做,因为它可能会在某些边缘情况下中断.
user (
id -- pkey
)
post (
id -- pkey
join_id -- non unique
)
user_posts (
user_id -- references user.id
post_join_id -- references post.join_id
)
在Java中:
public class User {
@Id
long id;
@ManyToMany()
@JoinTable(
name = "user_posts",
joinColumns = @JoinColumn(
name = "user_id",
referencedColumnName = "id"
),
inverseJoinColumns = @JoinColumn(
name = "post_join_id",
referencedColumnName = "join_id"
)
)
Set<Post> posts;
}
public class Post {
@Id
long id;
long join_id;
}
考虑到多个帖子具有相同的 join_id,这是进行映射的正确方法吗?我找不到太多关于在非唯一列上进行此类联接的信息。
谢谢。
如果您的帖子表已经有一个唯一的 ID 列,为什么不使用它而不是 join_id 列呢? 一般来说,使用 Hibernate 在 @ManyToMany 关系中引用联接表中的非唯一列可能会导致潜在问题。这里的核心问题是,在典型的 @ManyToMany 映射中,Hibernate 希望用于连接的列唯一标识两个表中的行。如果您使用非唯一列,它可能会带来歧义,特别是在获取或管理关系时。
潜在问题是: