【问题标题】:JPA DDL generation exceptionJPA DDL 生成异常
【发布时间】:2019-03-25 05:24:40
【问题描述】:

我有以下实体

@Data
@EqualsAndHashCode(callSuper = false)
@Entity
@Table(name = "REF_CLIENT")
@IdClass(RefClientID.class)

@NamedNativeQueries({@NamedNativeQuery(name = "RefClient.updateByClicincli", query = "UPDATE REF_CLIENT rc "
        + "SET rc.clicexcli = :clicexcli , rc.cliidclient=:cliidclient ,"
        + "rc.cliemail=:cliemail, rc.clitypcli=:clitypcli ," + "rc.clietatcli=:clietatcli"
        + "  WHERE rc.clicincli = :clicincli ;")})
public class RefClient extends CommonData implements Serializable {

    private static final long serialVersionUID = 4763218211813908401L;

    /**
     * N X NUMBER Code interne client
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "CLICINCLI", unique = true, updatable = false, nullable = false)
    private Long clicincli;

    /**
     * N X VARCHAR2(13) Code externe client
     */
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    @Column(name = "CLICEXCLI", unique = true, length = 13, nullable = false)
    private String clicexcli;

ID类如下

@Data
public class RefClientID implements Serializable  {

    /**
     * 
     */
    private static final long serialVersionUID = 1932584805198196159L;

    /**
     * N X VARCHAR2(13) Code externe client
     */
    private String clicexcli;

    /**
     * N X NUMBER Code interne client
     */
    private Long clicincli;

}

日志中生成的DDL是

Hibernate: 创建表 ref_client (cliexcli varchar(13) not null auto_increment, clicincli bigint not null, datcre DATE DEFAULT CURRENT_DATE not null

如您所见,VARCHAR 无法自动递增如何解决此问题?

我尝试删除标识策略,ddl 工作正常,但没有 clicincli 的 auto_increment,如果我重用它,它将在字符串字段 cliexcli 中生成 auto_increment,并且在 Long 字段中将没有 auto_increment (clicincli)

【问题讨论】:

    标签: java mysql sql hibernate jpa


    【解决方案1】:

    由于 @GeneratedValue 注释中用于 ID 生成的默认 strategyGenerationType.AUTO,我们必须手动将其更改为 SEQUENCE 当我们使用生成器时。

    我会将您的代码更改为:

        @Id
        @GeneratedValue(strategy=GenerationType.SEQUENCE, generator = "system-uuid")
        @GenericGenerator(name = "system-uuid", strategy = "uuid")
        @Column(name = "CLICEXCLI", unique = true, length = 13, nullable = false)
        private String clicexcli;
    

    您可以在Oracle documentation查看它

    默认值:javax.persistence.GenerationType.AUTO

    【讨论】:

    • 我总是将自动增量添加到 ddl,但不起作用:(
    • 我说的不是 AUTOINCREMENT,而是 strategy=GenerationType.SEQUENCE 不是真的有效吗?
    • Hibernate: 创建表 ref_client (clicincli varchar(13) not null auto_increment, clicincli bigint not null, 是真的不工作:(
    • auto_increment 应该在 clicincli 上生成,但它不是在cliexcli 上生成的,我无法理解!我尝试删除长 id 并且它工作正常,但添加它会产生这个问题
    • 很大程度上取决于您的数据库stackoverflow.com/questions/33096466/…
    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 2014-05-31
    • 2011-01-18
    • 2013-10-12
    • 2011-08-24
    • 2016-01-03
    • 1970-01-01
    相关资源
    最近更新 更多