sql - 如何在 Spring Data Jpa 中使用多对多表中的列?
问题描述
我有实体用户和事件。我的数据库中有三个表:“users”、“events”和“users_events”,用于保存用户和事件之间的多对多关系。当用户订阅一个事件时,应该节省订阅时间。我在表“users_events”中添加了新列“subscription_date”。我应该如何使用 Spring Data JPA 和 Hibernate 作为 ORM 编写和阅读本专栏?我尝试使用本机 SQL 查询在 UserRepository 中定义新方法,但它不起作用。
@Modifying
@Query(
value = "UPDATE users_events SET subscribed_date = :date " +
"WHERE event_id = :event_id AND subscribed_user_id = :user_id",
nativeQuery = true)
public void saveSubscribedDate(
@Param("user_id") int user_id,
@Param("event_id") int event_id,
@Param("date") LocalDateTime date);
}
解决方案
您必须为其创建三个实体类。
- 用户
- 事件
- 用户事件
尝试这样的事情:
@Entity
class User {
...
@ManyToMany(manpedby="event")
Collection<Event> events;
...
}
@Entity
class Event {
...
@ManyToMant(mappedby="user")
Collection<User> user;
...
}
@Entity
class UsersEvents {
private User user;
private Event event;
private Date date;
...
}
以及各自的三个存储库。
推荐阅读
- windows - Solr 在关闭 Windows 命令提示符时停止
- nginx - Nginx 配置错误
- javascript - 拼接不适用于 DOM 元素数组
- javascript - 错误和删除错误时的可访问性问题
- laravel - 多态关系laravel问题与视图
- azure - 如何设置对 Azure 应用服务的 FTP 访问?
- node.js - 当我尝试保存到 Firestore 时,为什么我的 Firebase HTTPS 功能会静默?
- javascript - 如何让 IonViewDidLoad 在事件订阅之后运行
- python - Django - 通知迁移不一致迁移历史
- .net - 在批处理文件中区分 COM dll 和 .NET 程序集