Spring Data JPA - 多对多查询

2024-03-21

我有两个实体“人物”和“电影”。

@Entity
public class Person {
..some fields

@ManyToMany(fetch = FetchType.LAZY, mappedBy = "actors")
@OrderBy("id")
private Set<Movie> moviesActor = new TreeSet<>();

}

@Entity
public class Movie {
..fields
@JoinTable(name = "actor_movie",
            joinColumns = { @JoinColumn(name = "movie_id") },
            inverseJoinColumns = { @JoinColumn(name = "actor_id") })
    private Set<Person> actors = new TreeSet<>();
}

由于存在多对多关系,因此有新表 actor_movie 来保存它。我怎样才能让每个人都拥有自己的电影集呢?所以我想要实现的是获取 actor_movie 表中存在的每个人。我尝试使用 Spring data jpa 但找不到正确的查询。


实体关系的最佳实践:

  1. 总是使用fetch = FetchType.LAZY.
  2. 当您想获取关系的另一面时,请使用JOIN FETCH Query.
    这解决了LazyInitializationException冬眠也。
  3. 总是使用spring.jpa.open-in-view=false

Example:
由 Spring Data JPA 和 Hibernate 作为 JPA 提供者。

实体:

public class Blog{
   ...
   @ManyToMany(fetch = FetchType.LAZY) //default is LAZY in ManyToMany
    @JoinTable(name="blog_tag",
        joinColumns = @JoinColumn(name = "blog_id"),
        inverseJoinColumns = @JoinColumn(name = "tag_id"))
    @OrderBy //order by tag id
    private Set<Tag> tags = new HashSet<>();

    //2 utility methods in owner side
    public void addTag(Tag tag){
        tags.add(tag);
        tag.getBlogs().add(this);
    }
    public void removeTag(Tag tag){
        tags.remove(tag);
        tag.getBlogs().remove(this);
    }
    
    //override equals & hashcode 

}


public class Tag {
    ...
    @ManyToMany(mappedBy = "tags")
    private Set<Blog> blogs = new HashSet<>();

    //override equals & hashcode 
}

现在假设您想要获取包含标签项的博客:

存储库:

@Repository
public interface BlogRepository extends JpaRepository<Blog, Long> {
    @Query("select b from Blog b join fetch b.tags where b.name = :name")
    Blog getBlog(@Param("name") String blogName);
}

service:

public interface BlogService {
    Blog getBlog(String blogName);
}

@Service
public class BlogServiceImpl implements BlogService{

    @Autowired
    private BlogRepository blogRepository;

    @Override
    public Blog getBlog(String blogName) {
        return blogRepository.getBlog(blogName);
    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Data JPA - 多对多查询 的相关文章

  • org.apache.jasper.JasperException:未指定默认命名空间时,函数测试必须使用前缀

    我在我的项目中使用以下内容 Spring 3 0 1 Apache Tiles 2 2 1 Glassfish 2 1 我想做的是调用 jsp 页面中的某些方法并向其传递一些参数 例如 我有一个豆子 Component Scope valu
  • Spring Batch - ItemStreamException:未创建输出文件

    我在多线程步骤中定义了以下 FlatFileItemWriter public FlatFileItemWriter
  • 使用 Spring 验证框架验证请求标头

    是否可以将 Spring 验证框架与 Spring MVC 结合使用来验证 HTTP 请求标头的存在和值 要检查presence请求标头的 您不需要验证框架 请求标头参数默认是强制的 如果请求中缺少强制标头 Spring MVC 会自动响应
  • 如何在数据库中对 (Java) 枚举进行建模(使用 SQL92)

    您好 我正在使用名为 性别 的列对实体进行建模 在应用程序代码中 性别应该是一个 Java 枚举类型 有 2 个值 男性和女性 知道作为数据类型的枚举不是通用 SQL 语言 92 的一部分 您将如何建模它 数据模型必须是可移植的 以便由多个
  • sqlite 插入表中 select * from

    我需要在 Android 应用程序中将数据从一个表移动到另一个表 我想使用以下sql insert into MYTABLE2 select id STATUS risposta DATETIME now data ins from MYT
  • 如何使用 Spring MVC 和 Thymeleaf 添加静态文件

    我的问题是如何添加 CSS 和图像文件等静态文件 以便我可以使用它们 我正在使用 Spring MVC 和 Thymeleaf 我查看了有关此主题的各种帖子 但它们对我没有帮助 所以我才来问 根据这些帖子 我将 CSS 和图像文件放在res
  • 为什么 Clojure MySQL 查询结果中出现“M”

    我有一个返回一行的 Clojure 查询 下面是返回行 映射 的部分打印输出 employer percent 0 00M premium 621 44M 这两列在mysql表中分别是decimal 5 2 和decimal 7 2 为什么
  • 无法将方法组“Read”转换为非委托类型“bool”

    我正在尝试使用SqlDataReader检查条目是否存在 如果存在则返回ID 否则返回false 当我尝试编译时 出现错误 无法将方法组 Read 转换为非委托类型 bool 我一直在遵循在 VB 中找到的示例 但似乎翻译可能不正确 pri
  • 在单个查询中设置和选择?

    我想知道是否可以在单个查询中设置和选择 像这样的事情 SET LOCAL search path TO 1 SET LOCAL ROLE user SELECT from posts 你可以这样做 with some set as sele
  • 如何使用maven创建基于spring的可执行jar?

    我有一个基于 Maven 的 Spring WS 客户端项目 我想将其打包为单个 jar 在eclipse中 一切运行正常 当我尝试将其打包为可执行 jar 时 我收到 ClassNotFound 异常 因为 Spring jar 未包含在
  • JPA - 非主键字段上的 @OneToOne 关系不起作用

    我有一个 Spring Data JPA 后端 使用 Hibernate 作为 ORM 实现 这是模型 Person MailConfig id PK uid PK FK Person uid uid Entity
  • 多个数据库连接

    我有三张桌子 categories content info and content The categories表包含类别的id及其 IDparent类别 The content info包含两列 entry id帖子的 ID 和cat
  • Sybase 中神秘的“时间戳”数据类型是什么?

    我最近在工作中发现 Sybase 数据库中的一个表使用 时间戳 类型的列 如果我使用这种神秘的时间戳数据类型创建一个表 如下所示 create table dropme foo timestamp roo int null insert i
  • 确定一个范围是否完全被一组范​​围覆盖

    如何检查范围是否为完全覆盖由一组范围 在以下示例中 WITH ranges id a b AS SELECT 1 0 40 UNION SELECT 2 40 60 UNION SELECT 3 80 100 UNION SELECT 4
  • SQL 查询在多用户环境中返回错误值

    一段时间以来 我们在我们的一个客户站点上发现了奇怪的数据完整性问题 经过大量调查后 我们现在已将其隔离为数据库调用 如果两个用户同时调用同一个存储过程 有时一个用户会得到另一个用户的结果 我们设置了一个测试来验证这一点 并且我们有一个循环
  • PDO::PARAM_FLOAT 不存在,为什么?

    我想知道为什么 PDO PARAM FLOAT 不存在以及什么可以替代它 没有 可能是由于隐含的舍入问题 只需使用PDO PARAM STR并使用将浮点数转换为字符串strval float or string float
  • Django 模型 - 外键作为主键

    我有以下2张表 在 models py 中 class Foo models Model uuid models CharField UUID primary key True default uuid4 and class FooExt
  • Tomcat下的Spring CXF Soap Web服务:找不到服务

    我正在尝试使用 CXF 和 Spring 设置一个在 Tomcat 上运行的简单 CXF Web 服务 我有一个 Web 应用程序初始化程序来引导 CXF servlet public class WebAppInitializer ext
  • 如何在 SQL 中存储目标(例如 RPG Quest)

    今天有人问我他们应该如何将任务目标存储在 SQL 数据库中 在这种情况下 请考虑角色扮演游戏 目标可能包括以下一些内容 发现 地点 杀死 n MOB 类型 获取 对象 的 n 个 实现 技能组 中的 技能 你在角色扮演游戏中获得的所有其他东
  • 如何使组合键唯一?

    I am making a database of students in one school Here is what I have so far 如果您不喜欢阅读 请跳至 简而言之 部分 问题是我对这个设计并不满意 我想要的组合gra

随机推荐

  • 如何启用 :tsearch 字典进行 pg_search 多重搜索?

    我正在将 pg search 添加到 Rails 应用程序中 我正在按照 github 上的说明进行操作铁路广播公司 http railscasts com episodes 343 full text search in postgres
  • Web Components(原生UI)之间如何通信?

    我正在尝试为我的一个 UI 项目使用本机 Web 组件 对于这个项目 我没有使用任何框架或库 例如 Polymer 等 我想知道是否有最好的方法或其他方式在两个项目之间进行通信像我们在 AngularJS Angular 中所做的那样的 W
  • Flexslider - 动画:“幻灯片”,animationLoop:“true” - 冲突

    我有一个问题弹性滑块2 http www woothemes com flexslider在某些特定情况下 我将它用作内容滑块 我需要的是让动画幻灯片而不是淡入淡出 并循环播放幻灯片 我有 3 张幻灯片 其中包含 div 内容和更多列表 以
  • 致命错误:调用成员函数 getKeyName()

    我是 joomla 的新手 我创建了一个 joomla 组件 当我单击管理中的新按钮时 我收到这样的错误 致命错误 在 C xampp htdocs Joomla1 libraries joomla application componen
  • 现代 Unix/Linux 系统上的密码是否仍限制为 8 个字符?

    多年前 Unix 密码的长度限制为 8 个字符 或者如果密码长度超过 8 个字符 那么多余的字符也不会产生任何影响 大多数现代 Unix Linux 系统上仍然是这种情况吗 如果是这样 大约什么时候在大多数系统上可以使用更长的密码 有没有一
  • 将双精度数字舍入为以位数给定的较低精度的有效方法

    在 C 中 我想将双精度舍入到较低的精度 以便可以将它们存储在关联数组中不同大小的存储桶中 与通常的舍入不同 我想舍入到多个有效位 因此 大数字的绝对变化将比小数字变化大得多 但它们往往会按比例变化 因此 如果我想四舍五入到 10 个二进制
  • 为什么这个具有推导返回类型的内联方法尚未定义?

    include
  • RadGrid 底部的水平滚动空白

    我正在使用 RadGrid 从数据库检索数据 我的 RadGrid 中有更多列 因此我需要显示 RadGrid 水平滚动以防止页面扩展 但禁用垂直滚动 因此网格的高度应扩展以始终显示网格中的所有行 我得到了结果 但 RadGrid 底部有空
  • 使用 Chosen 链接选择

    我正在尝试将选择与Chosen https github com harvesthq chosen and Chained http www appelsiini net projects chained但我不确定我是否正确实现了 chos
  • 文件观察器创建事件

    我正在使用 net 文件监视程序监视文件夹中的某些类型的文件 mbxml 我正在使用 filewatcher 创建的事件 一旦创建的事件触发 我必须将此文件移动到另一个文件夹 这种方法的问题在于 一旦文件复制开始 就会触发创建的事件 因此
  • 存储用户时区的最佳实践 - TSQL/.Net

    我需要跟踪用户的时区 以便在他们指定的特定时间 在他们自己的时区 处理他们的信息 或不处理 显而易见的答案是将时区及其个人资料信息存储在用户数据库中 有点棘手的是夏令时 从下图中请注意 大多数北部和南部地区使用夏令时偏移 因此 存储时区偏移
  • 防止 PHP 脚本在运行时耗尽所有资源?

    我有一个每日 cron 作业 运行大约需要 5 分钟 它会收集一些数据 然后更新各种数据库 它工作正常 但问题是 在这 5 分钟内 该站点完全没有响应任何请求 无论是 HTTP 还是其他请求 看起来 cron 作业脚本在运行时会占用所有资源
  • 使用基数排序实现 std::sort 重载是否合法?

    对于适用的数据类型 良好的基数排序可以大幅击败比较排序 但是std sort通常作为 introsort 实现 有没有理由不使用基数排序来实现std sort 基数排序不足以实现std sort因为std sort仅要求类型具有可比性 但对
  • Flutter:固定高度容器内的可滚动列子项

    我有一些容器里面一个ListView这将导致可滚动内容在一个页面内 每个容器都有一个 Column 作为子容器在列中 我有一个标题和一个分隔线 然后是实际内容 我希望其中一个容器是这样的 Title divider Scrollable c
  • Windows8:设备标识符

    我目前正在尝试检索唯一的设备标识符 这是我的代码 var token Windows System Profile HardwareIdentification getPackageSpecificToken null var reader
  • 如何在新页面上显示 AJAX 响应

    我正在phonegap中开发移动应用程序并使用intel xdk 我想在新的html页面上显示ajax响应我在google上搜索并找到了这个解决方案window open 但这种方法对我不起作用并显示空白 白屏 我想显示我的数据search
  • pyqt中GUI的模型视图实现错误

    当我关闭应用程序时 以下示例代码因此错误而崩溃 QBasicTimer start QBasicTimer can only be used with threads started with QThread 这是我的代码 import s
  • 如何使用 Modelform 和 jquery 在 django 中获取相互依赖的下拉菜单?

    我是 django 和 jquery 的新手 我正在开发一个基于 django 的应用程序 其中表单中有 3 个下拉列表 1 校园 2 学校 3 中心 层次结构是校园有学校 学校有中心 我想将这些下拉菜单相互链接 例如 我有 3 个校区 即
  • 不同分区中的 COM+ 对象激活

    我创建了一个 COM 域分区 然后将其映射到 Windows 2008 服务器计算机 并将 COM 应用程序导入其中 我尝试使用以下 C 代码远程激活服务器上特定分区中的对象 partition guid Guid guidMyPartit
  • Spring Data JPA - 多对多查询

    我有两个实体 人物 和 电影 Entity public class Person some fields ManyToMany fetch FetchType LAZY mappedBy actors OrderBy id private