【问题标题】:JPA GenerationType.AUTO and setting the field manuallyJPA GenerationType.AUTO 并手动设置字段
【发布时间】:2014-01-27 21:55:47
【问题描述】:

我有一个实体 bean,它的 id int 字段声明为 GenerationType.AUTO,以便自动生成 ID:

@Entity
public class CustomerPool implements Serializable
{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    //setters getters
}

不过,我需要确保插入的第一个 CustomerPool 的 ID 为 0。

我认为设置 ID 为 0 的 CustomerPool 会优先于指令,而不是我有不同的行为(使用 JPA 而不是 EclipseLink),但我设置的 ID 大多被忽略。

那么是否可以将 ID 设置为自动生成(如果未另行说明)以使用指定的 ID(如果有说明)? 不知何故,我习惯于在 PHP 中这样做,并且对我来说似乎是很自然的行为。

【问题讨论】:

  • GenerationType.AUTO 说“我不在乎这些值是如何生成的!”因此,您真的不应该关心,它是您的 JPA 提供程序和使用的 DBMS 的实现细节。如果您关心,您应该考虑其他生成方法或自己管理生成。

标签: java jpa eclipselink


【解决方案1】:

EclipseLink 默认验证主键并将 0 解释为 Null 和未设置的值,因此将生成主键值。因此,您可以将值设置为已使用的值,默认情况下它们必须大于 0。这可以通过这里描述的主键验证策略进行配置: http://eclipse.org/eclipselink/documentation/2.4/jpa/extensions/a_primarykey.htm

如果 0 是有效的主键,则可以设置属性:

<property name="eclipselink.id-validation" value="NULL"/>

【讨论】:

    猜你喜欢
    • 2015-11-27
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2014-09-22
    • 2012-02-28
    • 1970-01-01
    相关资源
    最近更新 更多