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

如何使用Hibernate和Oracle 10g方言通过JPA生成我的ID?

龚星洲
2023-03-14
问题内容

我有一些代码:

@Id
@SequenceGenerator(name = "SOMETHING_SEQ")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SOMETHING_SEQ")
@Column(name = "SOMETHING", nullable = false)
private Long id;

hibernate状态如何提供我的ID?

我在数据库中看到一个名为“ hibernate_sequence”的序列,没有其他hibernate的“特殊表”。


问题答案:

实际上,这SOMETHING_SEQ是您在hibernate配置中某处配置的序列的名称。并且hibernate_sequence是数据库中的序列名称。在配置中,其外观如下图所示,

<sequence-generator name="SOMETHING_SEQ" 
    sequence-name="hibernate_sequence"
    allocation-size="<any_number_value>"/>

您可以改为使用注释来完全跳过此配置。然后,您的@SequenceGenerator注释将需要提供更多的参数。以下是示例。

@SequenceGenerator(name="SOMETHING_SEQ", sequenceName="hibernate_sequence", allocationSize=10)

例如,多个实体类将执行以下操作,

@Entity
public class Entity1 {
  @Id
  @SequenceGenerator(name = "entity1Seq", sequenceName="ENTITY1_SEQ", allocationSize=1)
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entity1Seq")
  @Column(name = "ID", nullable = false)
  private Long id;

  ...
  ...

}

@Entity
public class Entity2 {
  @Id
  @SequenceGenerator(name = "entity2Seq", sequenceName="ENTITY2_SEQ", allocationSize=10)
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entity2Seq")
  @Column(name = "ID", nullable = false)
  private Long id;

  ...
  ...

}


 类似资料:
  • 问题内容: 我遵循了JPA modelgen 指南,并且能够生成所需的规范元模型。通过此pom设置: 生成的源已在指定目录中正确创建,我必须手动将其指定为eclipse项目类路径中的源才能使用它。当我触发Maven时,日志显示或,并且我仍然可以成功构建。所以我的问题是,在创建元模型时这种预期/正确的行为吗?还是我错过了cofig中的某些内容?谢谢 问题答案: 我也在使用JPA Metamodel

  • 问题内容: 我们如何使用Hibernate或JPA调用存储过程? 问题答案: 您可以执行以下操作 请在需要的地方添加异常处理。

  • 以下是我在pom中的相关配置.xml: 提前感谢您的帮助。

  • 问题内容: 我正在使用hibernate模式开发应用程序。当我尝试创建登录页面时,出现Sql Injection问题。我有以下代码: 在这种情况下,如何防止Sql Injection?loginInfo表的创建表语法如下: 问题答案: 您还有其他选择,请参阅mkyong的这篇不错的文章。

  • 问题内容: 我所有的实体都使用这种类型的 要么 我发现总是创建一个名为Oracle的序列。为什么会这样呢?我该如何避免呢? 我将JPA1与Hibernate 3和Oracle 10g方言一起使用。 问题答案: 我怀疑这是因为我正在使用Hibernate Envers,因为我仔细检查了我的实体,并且所有实体都有正确的@Id映射。

  • 问题内容: 对于使用不区分大小写的数据库模式的JPA实体模型,当我使用@IdClass批注时,始终会出现“实例标识符已更改”异常。对于具有“字符串”主键的对象,当数据库中存在一种情况的字符串并且使用相同的字符串(仅大小写不同)执行查询时,将发生错误。 我看过其他的SO答案,它们的形式是:a)不要修改主键(我不是),b)equals()/ hashCode()实现有缺陷。对于’b’,我尝试使用和,但