hibernate

时间:2017-07-03 07:31:56

标签: oracle hibernate jpa-2.0

在我发布问题之前,我完成了一系列调查, 我有一个名为" 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,我确实尝试了Hibernate选项给出了哪些不起作用,我甚至尝试使用表生成器,如下所示:

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

这里有另一个属性pkColumnValue,如果没有提及,将作为实体名称作为默认值。

1 个答案:

答案 0 :(得分:0)

如果没有错,你想要下一个序列值。

你可以直接在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)