【发布时间】:2022-01-22 13:11:52
【问题描述】:
我正在为此用例寻找最佳映射设计:
我需要做的就是将外键引用存储在@ManyToMany 关系中,但在获取时,我不关心对象,只关心 id 引用。 我有一个用户和餐厅关系: 用户可以“点赞”餐厅,餐厅也可以被用户“点赞”。 在我的前端,我需要为用户提供存储他们喜欢的内容并在以后获取它们的能力。
这就是我到目前为止所做的:
@Entity
User
@JsonIgnore
@ManyToMany
@JoinTable(name = "user_favorite_restaurants",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name= "restaurant_id", referencedColumnName = "id"))
public Set<Restaurant> userFavoriteRestaurants = new LinkedHashSet<>();
@ElementCollection
@CollectionTable(name="user_favorite_restaurants",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"))
@Column(name="restaurant_id")
public Set<Long> restaurantIds;
@Entity
Restaurant
@JsonIgnore
@ManyToMany(mappedBy = "userFavoriteRestaurants")
public Set<User> usersFavorite;
@ElementCollection
@CollectionTable(name="user_favorite_restaurants",
joinColumns = @JoinColumn(name = "restaurant_id", referencedColumnName = "id"))
@Column(name="user_id")
public Set<Long> userIds;
表格 userFavoriteRestaurants 是一个简单的两列表格,包含 user_id 和 restaurant_id。
这不工作。 userFavouriteRestaurants 有一个重复的 ManyToMany 交集表 user_favorite_restaurants。
这是要走的路吗,还是我在下线? 我应该只创建一个实体 UserRestaurant 并使用 PK 创建一个表,还是这是解决问题的好方法?
如何以优化的方式仅返回 id?
奖金: 假设这种关系会随着时间的推移而扩展,因此早晚需要 UserRestaurant 实体是否合乎逻辑?
【问题讨论】:
-
如果您对 Hibernate 仍有其他疑问/问题,请随时搜索 SO 或提出其他问题
:-)
标签: hibernate jpa hibernate-mapping