当前位置: 首页 > 面试题库 >

使用Hibernate批注映射PostgreSQL序列类型

皇甫鸿远
2023-03-14
问题内容

我正在使用Hibernate 3.3和PostgreSQL 8.x,并希望使用Hibernate批注来映射不是主键的自动增量列。

只要该列是由数据库而不是由Hibernate自动递增的,则在Postgres中使用SERIAL类型或序列映射该列都没有关系。我尝试了以下映射,但它们始终生成空的orderId。

@Column(name = "orderId", insertable = false)
@Generated(GenerationTime.INSERT)
//@GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
private Integer orderId;

我将不胜感激。

谢谢


问题答案:

以下映射应该可以正常工作:

@Column(name = "orderId")
@Generated(GenerationTime.INSERT)
private Integer orderId;

但是请注意,刷新会话之前,无法使用为新保存的对象生成的值。

编辑: 请注意,此映射不影响不会使Hibernate
serial在架构生成期间创建类型的列,因为Hibernate对数据库端值生成的性质一无所知。因此,如果希望Hibernate创建具有正确类型的列,则需要明确指定它:

@Column(name = "orderId", columnDefinition = "serial")
@Generated(GenerationTime.INSERT)
private Integer orderId;

在最新的Hibernate版本(4.3)上,可以使用以下命令:

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long orderId;


 类似资料:
  • 问题内容: 我的PostgreSQL数据库(9.2)中有一个表,其中的列类型为JSON。我很难将此列映射到“ JPA2实体”字段类型。 我尝试使用String,但是当我保存实体时,出现一个异常,即它无法将字符转换为JSON。 处理JSON列时使用的正确值类型是什么? 一个简单的解决方法是定义一个文本列。 问题答案: 请参阅PgJDBC错误#265。 PostgreSQL过于严格,对数据类型转换非常

  • 问题内容: 我的Java模型上有一个枚举类型,我想映射到数据库中的表。我正在使用“hibernate注释”,但我不知道该怎么做。由于我搜索的答案比较旧,我想知道哪种方法最好? 提前致谢 问题答案: 除了注释,您还需要其他东西吗?例如,以下枚举: 可以这样使用和注释: 您可以使用批注的enum属性指定枚举应如何在数据库中持久化。指定该枚举将作为整数值保留。在这里,设置为将永久保存为0,保留为1,依此

  • 问题内容: 有没有人通过Hibernate成功将PostgreSQL中的数字数组映射到Java中的数字数组? sql: 映射: 类: 查询表时出现异常。 问题答案: Hibernate不支持开箱即用的数据库阵列(例如,映射到的数据库阵列)。 Hibernate提供的类型和类型用于将Java数组映射到支持表- 它们基本上是一对多/元素集合映射的变体,所以这不是您想要的。 最新的PostgreSQL的

  • 我有一个带有列的表,类型是bit(24)。我尝试使用字符串,当我尝试获取这个对象时,它会很好地映射,但当我尝试保存它时,Hibernate抛出异常: 我知道如果有点(1),我可以使用布尔值,但我不知道在我的情况下应该怎么做。 提前谢谢!

  • 问题内容: 我想做这样的事情: 并让Foos保持在这样的表中: 更新: 我知道如何绘制其他实体的图,但是在许多情况下,这太过分了。似乎我所建议的是在没有创建另一个实体或以某个blob列中的所有内容结束的情况下是不可能的。 问题答案: 在Hibernate术语中,这是“值的集合”或“元素”。有一个(特定于Hibernate的)注释。JPA还不支持此功能。 简而言之,像这样注释您的收藏集: 这将创建带

  • 问题内容: 映射双向列表时,我不了解Hibernate的行为。Hibernate生成的SQL语句对我来说并不是最佳的。有人可以启发我吗? 情况如下:我有一对多的父子关系。我将此关系与双向列表映射。 根据《Hibernate注释参考指南》(第7章:与索引集合的双向关联),映射应如下所示: 但是在这种情况下,Hibernate在保留一个孩子的父母时会产生三个SQL语句: 第三条语句似乎是多余的,因为并