在我的 table 中插入新行不起作用

Inserting a new row in my table not working

主要

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import javax.persistence.EntityManager;
import model.Companie;
import repository.CompanieRepository;

import java.util.UUID;

public class Main
{
    private static final SessionFactory sessionFactory;
    private static final EntityManager entityManager;

    static
    {
        Configuration configuration = new Configuration()
                .configure("hibernate.cfg.xml")
                .addAnnotatedClass(Companie.class);

        sessionFactory = configuration.buildSessionFactory();
        entityManager = sessionFactory.createEntityManager();
    }

    public static void main(String[] args)
    {
        CompanieRepository companieRepository = new CompanieRepository(entityManager);
        Session session = sessionFactory.openSession();
        Companie comp = new Companie(26, "some name", "some another thing", "that thing");
        entityManager.persist(comp);
        session.close();

        System.out.println();
    }
}

公司class

package model;

import lombok.Data;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.util.UUID;

@Entity
@Data
public class Companie
{
//    @Id
//    @GeneratedValue(generator = "UUID")
//    @GenericGenerator(name = "id", strategy = "org.hibernate.id.UUIDGenerator")
//    @Column(name = "id", updatable = false, nullable = false, columnDefinition = "BINARY(16)")
//    private UUID id;
    @Id
    private int id;
    private String nume;

    @Column(name = "cod_fiscal")
    private String codFiscal;

    @Column(name = "nr_registru_comertului")
    private String nrRegistruComertului;

    public Companie()
    {
    }

    public Companie(int id, String nume, String codFiscal, String nrRegistruComertului)
    {
        this.id = id;
        this.nume = nume;
        this.codFiscal = codFiscal;
        this.nrRegistruComertului = nrRegistruComertului;
    }
}

输出

"C:\Program Files\Eclipse Adoptium\jdk-17.0.1.12-hotspot\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2021.2.3\lib\idea_rt.jar=49640:C:\Program Files\JetBrains\IntelliJ IDEA 2021.2.3\bin" -Dfile.encoding=UTF-8 -classpath D:xProjects\JavaPr\ContaApp\target\classes;C:\Users\Kentryx\.m2\repository\mysql\mysql-connector-java.0.25\mysql-connector-java-8.0.25.jar;C:\Users\Kentryx\.m2\repository\com\google\protobuf\protobuf-java.11.4\protobuf-java-3.11.4.jar;C:\Users\Kentryx\.m2\repository\org\hibernate\hibernate-core.6.1.Final\hibernate-core-5.6.1.Final.jar;C:\Users\Kentryx\.m2\repository\org\jboss\logging\jboss-logging.4.2.Final\jboss-logging-3.4.2.Final.jar;C:\Users\Kentryx\.m2\repository\javax\persistence\javax.persistence-api.2\javax.persistence-api-2.2.jar;C:\Users\Kentryx\.m2\repository\net\bytebuddy\byte-buddy.11.20\byte-buddy-1.11.20.jar;C:\Users\Kentryx\.m2\repository\antlr\antlr.7.7\antlr-2.7.7.jar;C:\Users\Kentryx\.m2\repository\org\jboss\spec\javax\transaction\jboss-transaction-api_1.2_spec.1.1.Final\jboss-transaction-api_1.2_spec-1.1.1.Final.jar;C:\Users\Kentryx\.m2\repository\org\jboss\jandex.2.3.Final\jandex-2.2.3.Final.jar;C:\Users\Kentryx\.m2\repository\com\fasterxml\classmate.5.1\classmate-1.5.1.jar;C:\Users\Kentryx\.m2\repository\javax\activation\javax.activation-api.2.0\javax.activation-api-1.2.0.jar;C:\Users\Kentryx\.m2\repository\org\hibernate\common\hibernate-commons-annotations.1.2.Final\hibernate-commons-annotations-5.1.2.Final.jar;C:\Users\Kentryx\.m2\repository\javax\xml\bind\jaxb-api.3.1\jaxb-api-2.3.1.jar;C:\Users\Kentryx\.m2\repository\org\glassfish\jaxb\jaxb-runtime.3.1\jaxb-runtime-2.3.1.jar;C:\Users\Kentryx\.m2\repository\org\glassfish\jaxb\txw2.3.1\txw2-2.3.1.jar;C:\Users\Kentryx\.m2\repository\com\sun\istack\istack-commons-runtime.0.7\istack-commons-runtime-3.0.7.jar;C:\Users\Kentryx\.m2\repository\org\jvnet\staxex\stax-ex.8\stax-ex-1.8.jar;C:\Users\Kentryx\.m2\repository\com\sun\xml\fastinfoset\FastInfoset.2.15\FastInfoset-1.2.15.jar;C:\Users\Kentryx\.m2\repository\org\projectlombok\lombok.18.22\lombok-1.18.22.jar Main
Jan 06, 2022 5:15:55 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate ORM core version 5.6.1.Final
Jan 06, 2022 5:15:55 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
Jan 06, 2022 5:15:56 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
Jan 06, 2022 5:15:56 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [com.mysql.cj.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/contabilitate]
Jan 06, 2022 5:15:56 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {password=****, user=clientDragos}
Jan 06, 2022 5:15:56 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
Jan 06, 2022 5:15:56 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
Jan 06, 2022 5:15:56 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
Jan 06, 2022 5:15:56 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@44784e2f] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
Jan 06, 2022 5:15:56 PM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]

进程已完成,退出代码为 0

我有一个我根本无法解决的问题。我刚开始冬眠。我想在我的数据库中插入一个新行。 table 被创建,如果我 运行 它是第一次创建 table 和列,一切都很好。之后,当我尝试插入一行时,我的数据库没有更新。 Java 没有插入任何东西。

PS:我尝试在 MySQL Workbench 中插入一个新行,但它工作得很好,问题是在 Java 中它不会诀窍。

PSS:我尝试了另一种解决方案:session.save(Object o) 等。没有任何效果

因为您忘记启动事务来完成您的工作。您必须提交事务以确认将更改保存到数据库。

如果您使用的是本机 Hibernate API,代码应该如下所示:

Session session = sessionFactory.openSession();
session.getTransaction().begin();
session.persist(comp);
session.getTransaction().commit();

如果您使用的是 JPA API,代码应该喜欢:

EntityManager em = entityManagerFactory.createEntityManager();
em.getTransaction().begin();
em.persist(comp);
em.getTransaction().commit();

通过调用会话在 hibernateUtil class 中执行事务,然后提交事务。更改可能会影响数据库。