postgresql @Entity在Spring中未在我的数据库中创建表

mdfafbf1  于 2023-01-30  发布在  PostgreSQL
关注(0)|答案(4)|浏览(145)

我的Spring项目中有这个类User

@Entity
public class User extends TimeStampModel{
    // Extends TimeStampModel so we know when the user was created
    @Id
    @GeneratedValue
    @Column
    private long id;

    @Column
    private String username;

    @Column
    private String password;

    @Column
    private long amountOfLikes;

    @Column
    private long amountOfDislikes;

    @OneToMany
    private List<Comment> comments;

    public User(){}

    //getters and setters omitted
}

但我得到一个错误:Caused by: org.postgresql.util.PSQLException: ERROR: relation "comment" does not exist以及许多其他错误。我的所有其他表都被正确创建。

我到底做错了什么?
这是我的评论类,Likeable是一个抽象类,它有numberOfLikes和numberOfDislikes的列。

@Entity
public class Comment extends Likeable {
    @Id
    @Column
    @GeneratedValue
    private long id;

    @Column(nullable = false)
    @Lob
    private String text;

    @OneToOne
    private User author;

    @OneToMany(cascade = CascadeType.ALL)
    private List<Comment> childComments;

    public Comment(){}

    //getters and setters omitted
}

如果需要,这里还有Likeable抽象类

@MappedSuperclass
public abstract class Likeable extends TimeStampModel{
    @Column
    private int likeAmount;

    @Column
    private int dislikeAmount;

    public void increaseLikeAmount(){
        this.likeAmount++;
    }
    public void increaseDislikeAmount(){
        this.dislikeAmount--;
    }

    //getters and setters omitted
}

这里是我的www.example.com也application.properties also

spring.jpa.database=POSTGRESQL
spring.datasource.url=jdbc:postgresql://localhost:5432/Test
spring.datasource.username=user
spring.datasource.password=pass
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=create
spring.jpa.show-sql=true
z9ju0rcb

z9ju0rcb1#

用户在PostgreSQL中是一个保留字,将其更改为其他内容可以修复所有问题。

rt4zxlrg

rt4zxlrg2#

在用户实体中,您正在与注解建立@OneToMany关系,但在注解实体中,它是@OneToOne.,请将其更改为@ManyToOne.

qxsslcnc

qxsslcnc3#

我在你的代码中发现了一些问题。a)你的Map不正确。在用户中你有一对多的Map和注解,而在注解中你有一对一的Map和用户。这需要修正。b)请尝试在用户和注解类的顶部使用@Table来重命名你的表名,因为用户是一个关键字。没有它将无法工作。
您可能还希望使用具有双向Map的mappedby属性来防止不必要的列。

zlwx9yxi

zlwx9yxi4#

您是否设置了hbm2ddl.auto来创建表,您可能还需要为实体类添加Map。

相关问题