Java 从从属对象列表中更新一个值

Java 从从属对象列表中更新一个值,java,hibernate,hql,lazy-loading,Java,Hibernate,Hql,Lazy Loading,给定具有组件列表的实体: class Entity{ Long id; String name; List<Component> components = new ArrayList<Component>(); } class Component{ Object value; } 那不行吗 或者,是否可以配置组件列表的延迟加载,以便第一次访问: entity.components.get(0).value = ".."; 不加载整个列表 编辑:

给定具有组件列表的实体:

class Entity{
    Long id;
    String name;
    List<Component> components = new ArrayList<Component>();
}
class Component{ Object value; }
那不行吗

或者,是否可以配置组件列表的延迟加载,以便第一次访问:

entity.components.get(0).value = "..";
不加载整个列表

编辑:
lazy=“extra”
配置对select有效(仅加载要更新的组件),但不会更新更改的组件。

您无法通过HQL更新单个集合元素

从:

  • from子句中只能有一个名为的实体
  • 在批量HQL查询中不能指定隐式或显式联接
由于集合元素不是实体,因此无法从批量更新中寻址。从技术上讲,非实体集合元素通常不可寻址;具有自然ID的元素的索引集合或集合是唯一的例外

虽然可以(尽管在这种情况下没有意义,除非您提前知道您将只查看第n个元素,因为批处理大小在运行时不容易更改),但这不会有帮助,因为当您尝试更新它时,整个集合都将被加载

选择单个集合元素(不是您问题的一部分,但我想根据您的回答和您的评论对此进行澄清):


+1这实际上引发了非常有趣的问题。我渴望了解您将选择的最终解决方案:-)
update Entity e set e.components[:index].value = :value where e.name = :name
entity.components.get(0).value = "..";
select c
  from Entity e join e.components c
 where index(c) = :index