gpt4 book ai didi

java.sql.BatchUpdateException : Field 'myFK' doesn't have a default value

转载 作者:行者123 更新时间:2023-11-29 06:58:07 25 4
gpt4 key购买 nike

我正在使用具有一对一关系的 Hibernate XML 映射构建一个应用程序。我的实体是 Auto 和 Targa。

这是我的 Java 类定义。

Targa.java

public class Targa {

private long id_targa;
private String stato;
private String codice;
...

Auto.java

public class Auto {

private long id_auto;
private String marca;
private String modello;
private int cilindrata;

private Targa targa;`
...

现在,我想在我的数据库中插入一个 Auto 和一个 Targa(我正在使用 MySQL)。 SQL表代码是:

CREATE TABLE targa (
id_targa BIGINT(20) NOT NULL,
stato VARCHAR(50) NOT NULL,
codice VARCHAR(50) NOT NULL,
PRIMARY KEY (id_targa)
)

CREATE TABLE auto (
id_auto BIGINT(20) NOT NULL,
marca VARCHAR(50) NOT NULL,
modello VARCHAR(50) NOT NULL,
cilindrata INT(11) NOT NULL,
targa BIGINT(20) NOT NULL,
PRIMARY KEY (id_auto),
FOREIGN KEY (targa) REFERENCES targa
)

因此,我创建了一个 Java main(我没有插入 setId 属性,因为它是 auto_increment):

    Targa ta = new Targa();
ta.setStato("Italia");
ta.setCodice("FW156WF");
new TargaDAO().insertTarga(ta);
Auto au = new Auto();
au.setMarca("Alfa Romeo");
au.setModello("Giulia");
au.setCilindrata(2400);
au.setTarga(ta);
new AutoDAO().insertAuto(au);

DAO 类使用 session.saveOrUpdate() 方法将对象保存在数据库中。

当我运行主代码时,我的 Targa 对象存储在数据库中,但是当我尝试存储我的 Auto 对象时,出现错误:

java.sql.BatchUpdateException: Field 'targa' doesn't have a default value

有人可以帮我吗?我不明白为什么我的表 Auto 中的列 targa 在插入后没有任何值。

我的映射文件是:

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="model.Auto" table="auto">

<id name="id_auto" column="id_auto">
<generator class="increment"/>
</id>
<property name="marca" column="marca"/>
<property name="modello" column="modello"/>
<property name="cilindrata" column="cilindrata"/>

<one-to-one name="targa" class="model.Targa" />
</class>
</hibernate-mapping>



<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="model.Targa" table="targa">

<id name="id_targa" column="id_targa">
<generator class="increment"/>
</id>
<property name="stato" column="stato"/>
<property name="codice" column="codice"/>

</class>
</hibernate-mapping>

最佳答案

您已设置au.setTarga(ta);但ta没有id,因为这一行

new TargaDAO().insertTarga(ta);

仅保留对象。您需要检索持久化的 id 并在进一步的查询中使用它

例如:

em.persist(entity);
System.out.println(entity.getId());

关于java.sql.BatchUpdateException : Field 'myFK' doesn't have a default value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44777861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com