错误:“用户”处或附近的语法错误

2022-09-01 21:35:23

我正在使用Hibernate,并且有一个名为“User”的持久类。由于这是一个关键字,我用不同的名称标记了@Entity属性(例如,我看到了这个问题:无法在postgresql休眠中使用名为“user”的表。)

但是,我仍然遇到麻烦,因为这个类扩展了另一个类,看起来休眠仍然试图使用“user”作为列名并搞砸了:

@Entity( name = "XonamiUser" )
public class User extends PropertyContainer {
    ...

@MappedSuperclass
public abstract class PropertyContainer implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected long key;
    /** tags */
    @ElementCollection
    protected Set<String> tags;

    @ElementCollection
    protected Set<String> searchList;
    ...

我的其他扩展 PropertyContainer 的类似乎工作正常。

这是休眠状态中的错误吗?有没有办法解决这种亏缺的重构?谢谢!

以下是我看到的错误(略微清理):

WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42601
ERROR org.hibernate.util.JDBCExceptionReporter - Batch entry 0 insert into user_search_list (user, search_list) values ('1', 'bjorn') was aborted.  Call getNextException to see the cause.
WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42601
ERROR org.hibernate.util.JDBCExceptionReporter - ERROR: syntax error at or near "user"
  Position: 31

答案 1

user是 PostgreSQL 中的保留关键字。它只允许作为带引号的标识符

您必须强制休眠在此 INSERT 命令中使用引号。"user"

我不是Hibernate专家,但也许这个Hibernate将用户模型保存到Postgres会有所帮助?


答案 2

我有点困惑,你指的是一个名为User的列或表...您可以使用@Table注释在 JPA 中设置实体的表名:

@Entity
@Table(name = "XonamiUser")
public class User extends PropertyContainer {

推荐