我有以下代码尝试为我的 Oracle (10g) 数据库COUNTRY_ID
中的表的主键列获取生成的序列值。COUNTRY
Country c=new Country();
c.setCountryName(request.getParameter("txtCountryName"));
c.setCountryCode(request.getParameter("txtCountryCode"));
Zone z=(Zone) session.get(Zone.class, new BigDecimal(request.getParameter("zoneId")));
c.setZone(z);
session.save(c);
session.flush();
//session.refresh(c);
System.out.println(c.getCountryId()); //Attempts to display the sequence value.
session.getTransaction().commit();
此代码中的此语句System.out.println(c.getCountryId());
尝试在插入完成后显示当前生成的序列值。
Oracle 表中的序列生成值以2 的倍数插入,即像这样的 414、416、418、420...,而不是像 414、415、416、417、418、419、420 这样的链中插入它们。 ..
假设Oracle表中当前插入的序列值为426
,这条语句System.out.println(c.getCountryId());
显示425
(而在COUNTRY_ID
Oracle表的列中,插入的值为426
)。
据推测,由于某些原因,该序列似乎被执行了两次。
在我的 Hibernate POJO 中,我指定了countryId
主键列,如下所示,
@Id
@Column(name = "COUNTRY_ID")
@SequenceGenerator(name = "CountryIdSequence", sequenceName = "COUNTRY_SEQ")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CountryIdSequence")
private long countryId;
在Country.hbm.xml
映射文件中,该列countryId
映射如下。
<id name="countryId" type="long">
<column name="COUNTRY_ID" precision="35" scale="0"/>
<generator class="sequence">
<param name="sequence">COUNTRY_SEQ</param>
</generator>
</id>
我在这里想念什么?