java - 线程 "AWT-EventQueue-0"中出现异常;传递给持久化的分离实体(在 Java 中)

标签 java database exception entity jpa-2.0

所以,我试图将来自 swing Action 监听器的数据放入 SQL 数据库中。

这是我的操作监听器代码的一部分,触发将数据放入数据库

poruka = "U suficitu ste ~ " + brojKalorija
                            + " kalorija.";
                    JOptionPane.showMessageDialog(null, poruka);

                    Podaci noviPodaci = new Podaci(brojKalorija, danInt,
                            mjesecInt, godinaInt, proteiniInt,
                            ugljikohidratiInt, mastiInt, godineInt,
                            masaInt, aktivnostInt, hrInt);
                    DatabaseUtils.spremiPodatke(noviPodaci);
                }

这是 DatabaseUtils 的重要组成部分:

public class DatabaseUtils {

public static void spremiPodatke(Podaci podaci) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("HibernatePersistenceUnit");
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    em.persist(podaci);
    em.getTransaction().commit();
}

这是podaci.java,它获取所有数据:

@Entity
@Table(name = "podaci.podaci_izracuna")

public class Podaci {

@Id
@Column(name = "brojKalorija_ID")
@GeneratedValue
private double brojKalorijaId;

@Column(name = "dan")
private int dan;
.
.
.
public Podaci(double brojKalorijaId, int dan, int mjesec, int godina, int proteini,
        int ugljikohidrati, int masti, int godine, int masa, int aktivnost, int hr) {
        this.brojKalorijaId = brojKalorijaId;
        this.dan = dan;
        this.mjesec = mjesec;
        this.godina = godina;
        this.proteini = proteini;
        this.ugljikohidrati = ugljikohidrati;
        this.masti = masti;
        this.godine = godine;
        this.masa = masa;
        this.aktivnost = aktivnost;
        this.hr = hr;

}
public double getBrojKalorijaId() {
    return brojKalorijaId;
}

public int getDan() {
    return dan;
}
.
.
(other getters)

数据库看起来像这样:

create schema podaci;
create table podaci.podaci_izracuna(
brojKalorija_ID decimal (7,2) generated always as identity,
dan int not null,
mjesec int not null,
godina int not null,
proteini int not null,
ugljikohidrati int not null,
masti int not null,
godine int,
masa int,
aktivnost int,
heartRate int,
primary key (brojKalorija_ID)
);

坚持:

    <?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> 
<persistence-unit name="HibernatePersistenceUnit" transaction-type="RESOURCE_LOCAL"> 
<class>podaci.Podaci</class> 
<properties> 
<property name="hibernate.show_sql" value="true"/> 
<property name="hibernate.format_sql" value="true"/> 
<property name="hibernate.connection.driver_class" value="org.h2.Driver"/> 
<property name="hibernate.connection.url" value="jdbc:h2:~/potrosnjaKalorija"/> 
<property name="hibernate.connection.username" value="seminar"/> 
<property name="hibernate.connection.password" value="seminar"/> 
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> 
<property name="hibernate.hbm2ddl.auto" value="update"/> 
</properties> 
</persistence-unit> 
</persistence>

抱歉有很多代码,当我使用操作监听器运行该文件时,我收到以下消息: 线程“AWT-EventQueue-0”中的异常 javax.persistence.PersistenceException:org.hibernate.PersistentObjectException:传递给持久化的分离实体:podaci.Podaci 在 org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387)

等等...

我没有数据库方面的经验,我认为持久化是问题所在,希望ypu可以提供帮助。

最佳答案

您已将数据库配置为生成 @Id 属性 (brojKalorijaId),但您正在构造函数中设置它。

将构造函数更改为设置 brojKalorijadId 属性。当实体被持久化时,数据库将为@Id创建一个唯一的值。

向实体添加一个新属性,该属性将保存数据库生成的@Id。

关于java - 线程 "AWT-EventQueue-0"中出现异常;传递给持久化的分离实体(在 Java 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17332958/

相关文章:

exception - 处理 "java.lang.OutOfMemoryError: PermGen space"错误

java - Tomcat Magnolia 5 管理中心面板错误

java - Apache CXF,从 WSDL 文件生成 Web 服务

java - 更新Map的Map值

sql - 临时数据和存储库模式

mysql - 如何向用户添加所有SHOW权限?

java - 如何在 Cloud Endpoints 中返回自定义错误代码?

java - Android - 根据用户选择设置背景颜色

MYSQL使用不同表的外键将数据插入表中

java - 我正在尝试插入数据库。n 出现错误 "java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity"