我不知道为啥我非常简单的 JPA 项目不起作用

Posted

技术标签:

【中文标题】我不知道为啥我非常简单的 JPA 项目不起作用【英文标题】:I don't know why my very simple JPA project doesn't work我不知道为什么我非常简单的 JPA 项目不起作用 【发布时间】:2022-01-20 19:09:14 【问题描述】:

我有 org.postgresql.util.PSQLException: ERROR: 关系“角色”不存在,我不知道为什么。

实体类

package com.example.SpringBootTest1.model;

import lombok.*;
import javax.persistence.*;

@ToString
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "roles")
public class Role

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Setter
    @Getter
    private int id;
    
    @Setter
    @Getter
    @Column(name = "name")
    private String name;

main()

public static void main(String[] args)

        
    EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("role_pu");
    EntityManager entityManager = entityManagerFactory.createEntityManager();
    EntityTransaction entityTransaction = entityManager.getTransaction();

    entityTransaction.begin();
        
    Role role1 = new Role();
    role1.setName("role111");
    entityManager.persist(role1);
    entityManager.getTransaction().commit();
    entityManagerFactory.close();
    entityManager.close();

资源/META-INF/persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="role_pu" transaction-type="RESOURCE_LOCAL">

        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

        <class>com.example.SpringBootTest1.model.Role</class>

        <properties>
            <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/postgres"/>
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
            <property name="javax.persistence.jdbc.user" value="postgres"/>
            <property name="javax.persistence.jdbc.password" value="123"/>

            <property name="dialect" value="org.hibernate.dialect.PostgreSQL94Dialect"/>
            <property name="show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hdm2ddl.auto" value="create"/>
        </properties>

    </persistence-unit>
</persistence>

pom.xml我有hibernate-corepostgresqllombok 那么为什么我有这样的错误,为什么会这样呢?我读过this question,但对我没有帮助。

【问题讨论】:

【参考方案1】:

在现代 Hibernate 版本中,属性 hdm2ddl.auto 应该是 hibernate.hbm2ddl.autojavax.persistence.schema-generation.database.action

https://docs.jboss.org/hibernate/stable/orm/userguide/html_single/Hibernate_User_Guide.html#configurations-hbmddl

【讨论】:

以上是关于我不知道为啥我非常简单的 JPA 项目不起作用的主要内容,如果未能解决你的问题,请参考以下文章

我不知道为啥我的 IOCP 的 numberOfConcurrentThreads 参数不起作用

我不知道为啥我的 add 方法不起作用

为啥我的 OpenGL 纹理不起作用?

仅在 Windows 10 中,Java Keyevent 不起作用..在 Windows 7 和 8 中它运行良好..我不知道为啥

AsyncSocket 对我不起作用

我不明白为啥这个@selector 不起作用