【问题标题】:Hibernate annotations for Serial id in Postgres 9.1Postgres 9.1 中序列号的休眠注释
【发布时间】:2014-11-16 02:55:32
【问题描述】:

当我使用这个注解编译我的 Java 代码时出现错误:

@Id
@Column(name="\"idClass\"", unique=true, nullable=false, columnDefinition = "serial")
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer idClass;

<property name="show_sql">true</property> 在调试它返回:

Hibernate: select nextval ('hibernate_sequence')

id 列是串行的。有任何想法吗? 我尝试使用@Generated(GenerationTime.INSERT) 进行编译,但没有运行。谢谢。

[已解决]

我的解决办法是:

     @Id
     @SequenceGenerator(name="IDCLASS_GENERATOR", sequenceName="\"table_idClass_seq\"", allocationSize = 1)
     @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="IDCLASS_GENERATOR")
     @Column(name="\"idClass\"")

【问题讨论】:

  • 您遇到的错误是什么?
  • 你到底想在这里问什么?
  • 我必须使用哪个注释来映射 Postgres 中的序列号?
  • 为什么你有那些转义引号,“\”idClass\“”?试试@Id @Column(name="\"idClass\"") @GeneratedValue(strategy = IDENTITY)
  • @django 你在数据库中的列名是什么?

标签: java hibernate postgresql-9.1 hibernate-annotations


【解决方案1】:

你真正的问题是区分大小写,你使用区分大小写的列名,你必须用反引号括起来。

@Id 
@Column(name="`idClass`") 
@GeneratedValue(strategy = IDENTITY)
private Integer idClass;

【讨论】:

    【解决方案2】:

    见下面代码

    @Column(name="idClass", unique=true, nullable=false, columnDefinition = "serial")
    @Generated(GenerationTime.INSERT)
    private Integer idClass;
    

    或者你可以使用

    @GeneratedValue(strategy = GenerationType.IDENTITY)
    

    【讨论】:

    • 谢谢,但它返回 org.postgresql.util.PSQLException: 在此 ResultSet 中找不到列名 idClass。当调用 session.saveOrUpdate(myObject); 时会触发此异常,其中 myObject 包含对应表的所有值,除了 idClass 因为它是序列化且未设置。
    • 试试@Id @Column(name="\"idClass\"")
    • 现在 org.hibernate.id.IdentifierGenerationException: 必须在调用 save() 之前手动分配此类的 ID:... @JavaBeigner
    猜你喜欢
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 2012-08-05
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多