【问题标题】:HQL query for primary key generation in hibernate在休眠中生成主键的 HQL 查询
【发布时间】:2017-12-06 09:28:35
【问题描述】:

在我可以在这里发布问题之前,我已经完成了一系列调查, 我有一个名为“CODE”的实体,我需要保留它,以生成当前使用的主键:

@Id
@SequenceGenerator(name = "CodeSequenceGenerator", sequenceName = "PRO_SEQ", allocationSize = 1)
@GeneratedValue(generator = "CodeSequenceGenerator", strategy = GenerationType.SEQUENCE)
@Column(name = "CODE_ID")
protected Long codeId;

这会导致从指定序列的临时表中选择 ID。我需要的是从特定表中选择的 ID。我有一个 oracle 查询。

select seq(pro_seq, nextval)
from value_table v
where v.value >= 0
LIMIT 1  

如何将其写入 HQL 并使用它作为我的实体的主键?
这里seq(pro_seq,nextVal)是oracle函数获取最新的序列值。
我一直在浏览这个问题,并且也使用了@TableGenerator,但也没有用。 请指导!

我没有尝试查询,因为我的数据库不是 MYSQL 我确实尝试了给定的休眠选项,但它不起作用,我什至尝试使用表生成器,如下所示:

@TableGenerator(name = "ModifierSequenceGenerator", table = "CODE_VALUE", valueColumnName = "REFERENCE_SEQ.nextval", pkColumnName = "code_value")
@GeneratedValue(strategy = GenerationType.TABLE, generator = "ModifierSequenceGenerator")

这里还有另外一个属性pkColumnValue,如果没有提到,默认作为实体名。

【问题讨论】:

    标签: oracle hibernate jpa-2.0


    【解决方案1】:

    如果没有错,您需要下一个序列值。

    您可以像这样直接在 MYSQL 查询中执行此操作。 这给出了最后使用的 CODE_ID。你可以增加这个值并使用。

    SELECT CODE_ID FROM value_table ORDER BY CODE_ID DESC LIMIT 0,1;
    

    或者如果你想让 hibernate 来处理这个使用这个。通过这样做,您告诉自动生成 Id 值

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "CODE_ID", nullable = false)
    

    【讨论】:

    • 我厌倦了建议的方法,但它不起作用。无论如何谢谢
    • 我没有尝试查询,因为我的数据库不是 MYSQL 我确实尝试了给定的休眠选项,但它不起作用,我什至尝试使用表生成器,如上所示:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多