我有下面的代码试图对主键列取所生成的序列值COUNTRY_ID
所述的COUNTRY
表中我的Oracle(10克)的数据库。
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>
我缺少的是在这里吗?