Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate,在不加载集合的情况下更新包含集合的对象_Java_Xml_Hibernate_Hbm_Hibernate Session - Fatal编程技术网

Java Hibernate,在不加载集合的情况下更新包含集合的对象

Java Hibernate,在不加载集合的情况下更新包含集合的对象,java,xml,hibernate,hbm,hibernate-session,Java,Xml,Hibernate,Hbm,Hibernate Session,我有一个项目,其中包含一组列,其中包含一组任务,其中包含一组TaskAssigness 我正在尝试更新列标题,而不必加载其任务集,但出现以下错误: [AssertionFailure] - an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session) org.hibernate.AssertionFailure

我有一个项目,其中包含一组列,其中包含一组任务,其中包含一组TaskAssigness

我正在尝试更新列标题,而不必加载其任务集,但出现以下错误:

[AssertionFailure] - an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
    org.hibernate.AssertionFailure: collection [com.example.tasks.Task.taskAssignees] was not processed by flush() 
我有以下hbm.xml:

Project.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "classpath://org/hibernate/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="com.exemple.tasks.project.Project" table="P_TASKS_PROJECT">
    <cache usage="read-write" />
    <id name="rowId" column="rowId">
      <generator class="native"/>
    </id>
    ...
    <set name="columns" table="P_TASK_PROJECT_COLUMN" inverse="true" cascade="all" sort="com.exemple.tasks.project.ColumnIndexComparator">
      <cache usage="read-write" />
      <key column="projectId" not-null="true" />
      <one-to-many class="com.exemple.tasks.project.Column" />
    </set>

  </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "classpath://org/hibernate/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="com.example.tasks.project.Column" table="P_TASK_PROJECT_COLUMN">
    <cache usage="read-write" />
    <id name="rowId" column="rowId">
      <generator class="native"/>
    </id>
    ...
    <property name="title" />
    <many-to-one name="project" class="com.example.tasks.project.Project">
      <column name="projectId" not-null="false" />
    </many-to-one>

    <set name="tasks" table="P_TASKS_JOIN_COLUMNS">
      <cache usage="read-write" />
      <key column="columnId" not-null="true" />
      <many-to-many column="taskId" class="com.example.tasks.Task" unique="false" />
    </set>
  </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "classpath://org/hibernate/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="com.example.tasks.Task" table="P_TASK">
    <cache usage="read-write" />
    <id name="rowId" column="rowId">
      <generator class="native"/>
    </id>
    ...
    <set name="taskAssignees" table="P_TASK_ASSIGNEE" cascade="all-delete-orphan">
      <cache usage="read-write" />
      <key column="taskId" not-null="true" />
      <one-to-many class="com.example.tasks.TaskAssignee" />
    </set>

  </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "classpath://org/hibernate/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="com.example.tasks.TaskAssignee" table="P_TASK_ASSIGNEE">
    <cache usage="read-write" />
    <id name="rowId" column="rowId">
      <generator class="native"/>
    </id>
    ...
    <many-to-one name="task" class="com.example.tasks.Task" insert="false" update="false">
      <column name="taskId" not-null="true" />
    </many-to-one>

  </class>
</hibernate-mapping>
如果列中不包含任何任务,则此操作可以正常工作。 如果我尝试更新包含任务的列,则会收到以下错误消息:

[AssertionFailure] - an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: collection [com.example.tasks.Task.taskAssignees] was not processed by flush() 
如果我在更新项目之前获得tasks和tasks assigness,则我没有错误:

Set<Task> tasks = col.getTasks();
  if (tasks != null) {
    for (Task task : tasks) {
      task.getTaskAssignees();
     }
   }
session.saveOrUpdate(project);
Set tasks=col.getTasks();
如果(任务!=null){
for(任务:任务){
task.getTaskAssignees();
}
}
会议.保存或更新(项目);
有没有办法更改我的专栏标题,然后更新项目,而不必获取任务和任务受让人?我可以告诉hibernate只更新列而不尝试进一步吗

Set<Task> tasks = col.getTasks();
  if (tasks != null) {
    for (Task task : tasks) {
      task.getTaskAssignees();
     }
   }
session.saveOrUpdate(project);