插入到JPA集合而不加载它

2023-12-26

我目前正在使用这样的代码将新条目添加到我的实体中的集合中。

player = em.find(Player.class, playerId);
player.getAvatarAttributeOwnership().add(new AvatarAttributeOwnership(...));

它有效,但每次我想添加一个项目时,都会加载整套项目。

  1. 有没有办法(可能需要查询)添加该项目而不加载其余项目?在 SQL 中它会是这样的INSERT INTO AvatarAttributeOwnership(player, data, ...) VALUES({player}, ...);
  2. Currently uniqueness is maintained by the contract of Set and AvatarAttributeOwnership.equals, but I assume that won't work anymore. How can I enforce it anyway?

我正在使用 JPA2+Hibernate。代码:

@Entity
public class Player implements Serializable {

    @Id
    @GeneratedValue
    private long id;

    @ElementCollection(fetch=FetchType.LAZY)
    // EDIT: answer to #2
    @CollectionTable(uniqueConstraints=@UniqueConstraint(columnNames={"Player_id","gender","type","attrId"}))
    Set<AvatarAttributeOwnership> ownedAvatarAttributes;

    ...

}

@Embeddable
public class AvatarAttributeOwnership implements Serializable {

    @Column(nullable=false,length=6)
    @Enumerated(EnumType.STRING)
    private Gender gender;

    @Column(nullable=false,length=20)
    private String type;

    @Column(nullable=false,length=50)
    private String attrId;

    @Column(nullable=false)
    private Date since;

    @Override
    public boolean equals(Object obj) {

        if (this == obj) return true;
        if (obj == null) return false;
        if (getClass() != obj.getClass()) return false;

        AvatarAttributeOwnership other = (AvatarAttributeOwnership) obj;

        if (!attrId.equals(other.attrId)) return false;
        if (gender != other.gender) return false;
        if (!type.equals(other.type)) return false;

        return true;
    }

    ...

}

Try 超惰性集合 https://sites.google.com/a/pintailconsultingllc.com/java/hibernate-extra-lazy-collection-fetching:

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

插入到JPA集合而不加载它 的相关文章

随机推荐

  • 图像到条形码识别[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我知道这个问题在 stackoverflow 上已经讨论过几次了 但我无法找到足够的答案 对于一个项目 我正在寻找可以从输入图像中识别条形
  • Java - 将带有 CSS 图像的 html 转换为 pdf [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个免费的java库来将html转换为pdf Html 页面使用 CSS 进行格式化 这些样
  • Python 中 x 的 n 次方根有简写吗?

    在数学中 如果我想计算 3 的 2 次方 则不需要任何符号 但我将 2 写得较小 3 在Python中 这个操作似乎由 syntax gt gt gt 3 2 9 如果我想从另一个方向计算 9 的 2 次方根 那么在数学中我需要使用一个符号
  • 使用java从PostgreSQL中的bytea检索文件

    您好 我正在使用下面的代码使用 java 从 postgresql bytea 检索文件 但在文件中我得到了类似 314530413142313141 的数字 File file new File c test doc FileOutput
  • 用于创建基本类型的实现的自定义

    所以我有以下类型 public abstract class Base public string Text get set public abstract int Value get set public class BaseImplA
  • 如何停止 RSpec 警告消息

    我刚刚开始学习在我的 Rails 应用程序上使用 RSpec 一切似乎都正常 但是当我跑步时rspec spec我收到了一页又一页的我认为是 lint 的消息 我不介意那些引用我的代码的内容 但其中很多都引用我正在使用的 Gems 我真的无
  • 从 URL 加载图像到 imageView 并缓存

    嗨 我是 android 的新初学者 我想从 URL 将图像插入到 imageView 中 但是每当第一次从 imageView 中的 URL 加载图像时 第二次应该在没有互联网的情况下插入图像 这意味着它也会存储在缓存中 为此 您可以使用
  • Flutter 处理调试控制台错误“找不到方法”

    在学习 Firebase 上的 Flutter 课程时 我尝试重新加载模拟器 尽管该应用程序运行良好 但我在调试控制台中收到了一些错误日志 EGL emulation 20277 eglMakeCurrent 0xe97df060 ver
  • 解析中没有注册设备(推送通知)

    我在使用 Parse com 处理推送通知时遇到问题 我可以传递一条消息进行解析 但是当我尝试从解析发送一条消息时 我被告知我有 没有注册的设备 而实际上 我在开发中心有几个 看起来代码工作正常 但感觉我错过了一些东西 有任何想法吗 这是我
  • 如何合并 GitLab CI 作业上的规则

    假设我有这个隐藏的 基础 工作 base job rules if CI COMMIT TAG when never if CI PIPELINE SOURCE web 我想将这些规则添加到新工作中 并且也能够扩展它们 例如 job 1 r
  • Laravel 和 Redis 扫描

    我正在尝试使用redisscan与拉拉维尔 我可以发出一个返回 10 个键的请求 但我希望循环直到返回所有键 我不确定如何用 laravel 做到这一点 目前我有 test Redis scan 0 match keypattern 我不知
  • 我可以检测到我的服务何时被“高级任务杀手”杀死吗

    我的应用程序运行地理定位服务 用户可以通过切换按钮激活或禁用该服务 为了检查服务的状态 我在共享首选项中编写了一个布尔值 多亏了我的服务的 onDestroy 我听到了服务的开始和结束 我的问题是 当用户使用 高级任务杀手 杀死服务时 我不
  • 我可以通过字符串引用 WPF 元素吗?

    我希望能够通过字符串中的文本引用 C 中的 WPF 元素 像这样的事情 SelectElementFromString TestButton Opacity 1 我可以这样做吗 你真的需要吗 不知怎的 我对此表示怀疑 怎么样 XAML
  • 如何在C#中强制退出应用程序?

    我有一个多线程 C 应用程序 它有读写器锁 但它在某些计算机上给出超时异常 无法及时获取锁 我需要强制关闭所有线程 我该如何做到这一点而不会出现任何额外的异常 我认为强制应用程序退出的最佳解决方案是使用以下代码行 Environment E
  • 子目录中的递归 make

    我怎样才能订购makeMakefile中的命令在所有子目录中递归执行make命令 在子目录的 Makefile 中定义 Read 递归使用 Make http www gnu org software make manual make ht
  • 如何从 Perl 中的逗号分隔值中提取值?

    我有一个日志文件 其中包含来自不同服务器的统计信息 我仅使用正则表达式将统计信息与此日志文件分开 我正在尝试从正在运行的进程中捕获 CPU 使用情况 对于 SunOS 我有以下输出 process 10050 user1 218 59 0
  • 是否可以将 python 子进程的输出实时流式传输到网页?

    预先感谢您的任何帮助 我对 python 相当陌生 对 html 甚至更新 过去几天我一直在尝试创建一个带有按钮的网页 以在家庭服务器上执行任务 目前我有一个 python 脚本 它生成一个带有按钮的页面 See the simplifie
  • 正向索引 vs 倒排索引 为什么?

    我正在阅读有关倒排索引 由 Solr Elastic Search 等文本搜索引擎使用 的内容 据我了解 如果我们以 Person 为例 属性与 Person 的关系是倒置的 John gt PersonId 1 PersonId 2 Pe
  • 从 Sentinel C# 获取 Redis Master 地址

    我正在尝试使用哨兵来获取我的主站的连接地址 问题是哨兵仅在故障转移时发送地址 但是如果我的主站关闭并且从站被提升为主站并且我的应用程序刚刚启动它就不会知道并且不会收到原来master宕机的消息 有什么办法可以和sentinel通信并询问他认
  • 插入到JPA集合而不加载它

    我目前正在使用这样的代码将新条目添加到我的实体中的集合中 player em find Player class playerId player getAvatarAttributeOwnership add new AvatarAttri