Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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-在另一个类中fk自引用时处理添加(插入)_Java_Hibernate_Foreign Keys_One To Many - Fatal编程技术网

Java Hibernate-在另一个类中fk自引用时处理添加(插入)

Java Hibernate-在另一个类中fk自引用时处理添加(插入),java,hibernate,foreign-keys,one-to-many,Java,Hibernate,Foreign Keys,One To Many,我有如下Hibernate配置 +----------------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------------+---------+------+-----+---------+-------+ | cpu_model_id | int(11) | NO | MUL | NULL |

我有如下Hibernate配置

+----------------+---------+------+-----+---------+-------+
| Field          | Type    | Null | Key | Default | Extra |
+----------------+---------+------+-----+---------+-------+
| cpu_model_id   | int(11) | NO   | MUL | NULL    |       |
| cpu_sw_id      | int(11) | NO   | MUL | NULL    |       |
+----------------+---------+------+-----+---------+-------+
CPUModel

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="org.example.CPUModel" table="cpu_model">
    <id name="cpuModelId" type="java.lang.Integer" unsaved-value="null">
      <column name="cpu_model_id"/>
      <generator class="identity"/>
    </id>
    <property name="name" type="java.lang.String">
      <column length="32" name="name"/>
    </property>
    <set name="softwares" inverse="true" lazy="false" table="cpu_model_software" cascade="all-delete-orphan" order-by="cpu_sw_id desc">
      <key>
        <column name="cpu_model_id" not-null="true"/>
      </key>
      <one-to-many class="org.example.CPUModelSoftware"/>
    </set>
  </class>
</hibernate-mapping>
因此,Hibernate试图在不首先从DB获取生成的cpu模型id,然后为CPUModelSoftwarePK设置的情况下进行插入(请参阅CPUModel Hibernate配置)

那个么,我如何告诉Hibernate它应该首先向cpu\ U模型表进行插入呢。然后从那里获取id,设置CPUModelSoftwarePK的id并进行插入

CPUModelSoftware/PK的数据库如下所示

+----------------+---------+------+-----+---------+-------+
| Field          | Type    | Null | Key | Default | Extra |
+----------------+---------+------+-----+---------+-------+
| cpu_model_id   | int(11) | NO   | MUL | NULL    |       |
| cpu_sw_id      | int(11) | NO   | MUL | NULL    |       |
+----------------+---------+------+-----+---------+-------+
对于CPUModel

+----------------+------------------+------+-----+---------+----------------+
| Field          | Type             | Null | Key | Default | Extra          |
+----------------+------------------+------+-----+---------+----------------+
| cpu_model_id   | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| name           | varchar(32)      | NO   |     |         |                |
+----------------+------------------+------+-----+---------+----------------+
编辑

在制作新的CPUModelSoftwarePK软件时,我似乎没有取消CPUModelSoftwarePK。然而,现在我得到了这个:

ids for this class must be manually assigned before calling save(): org.example.CPUModelSoftware

据我所知,Hibernate不支持
hbm.xml
中定义的映射中的派生标识。这意味着Hibernate无法根据
CPUModel
CPUModel软件之间的关系自动设置
CPUModel
的值


因此,您需要先保存
CPUModel
(使用空的
软件
),然后需要将其生成的标识符分配给
CPUModelSoftware
的compisite id字段,并保存
CPUModelSoftware
,据我所知,Hibernate不支持
hbm.xml
中定义的映射中的派生标识。这意味着Hibernate无法根据
CPUModel
CPUModel软件之间的关系自动设置
CPUModel
的值


因此,您需要先保存
CPUModel
(使用空的
软件
),然后需要将其生成的标识符分配给
CPUModelSoftware
的compisite id字段,并保存
CPUModelSoftware

try
try
是这样的。我必须首先保存CPUModel对象,而不必引用CPUModel软件。之后,只需使用CPUModelSoftware引用再次保存。不知何故,我认为Hibernate可以自动完成这项工作,但这个世界并不完美。:-)谢谢是的,就是这样。我必须首先保存CPUModel对象,而不必引用CPUModel软件。之后,只需使用CPUModelSoftware引用再次保存。不知何故,我认为Hibernate可以自动完成这项工作,但这个世界并不完美。:-)谢谢
ids for this class must be manually assigned before calling save(): org.example.CPUModelSoftware