Oracle和HIbernate,db序列生成器问题

时间:2010-06-23 21:24:36

标签: java oracle hibernate

我有以下实体(getter和setter ommited)...

@Entity
@Table(name = "TBL_PROJECT_RUN")
public class ProjectRunEntity {

    @Id
    @Column(name = "ID")
    @GeneratedValue(generator = "StakeholdersSequence")
    @SequenceGenerator(name = "StakeholdersSequence", sequenceName = "STAKEHOLDERS_UPDATE_SEQ", allocationSize = 1)
    private Integer id;

    @Column(name = "REPORT_RUN_DATE")
    private Date systemRunDate;

    @Column(name = "JIRA_PROJECT_NAME")
    private String jiraProjectName;

    @Column(name = "JIRA_PROJECT_DESC")
    private String jiraProjectDescription;

    @Column(name = "RUNBY")
    private String runBy;

    @Column(name = "HEADER_TEXT")
    private String headerText;

    @Column(name = "FOOTER_TEXT")
    private String footerText;

    @Column(name = "JIRA_ID")
    private String jiraId;

    @Column(name = "TO_EMAIL")
    private String toEmail;

    @Column(name = "CC_EMAIL")
    private String ccEmail;

    @OneToMany(fetch = FetchType.EAGER, mappedBy = "projectRunEntity")
    private List<ProjectRunDetailsEntity> projectRunDetailsEntities;

然后我像这样将它提交到数据库......

 final Session session = sessionProvider.get();
    session.persist(projectRunEntity);
    session.flush();
    return projectRunEntity.getId();

这里返回的id不是数据库中的实际id,而是1或2。请注意,我正在为项目中的所有表中的所有ID共享一个序列,以便任何给定实体都具有项目范围的唯一索引。什么会导致id不正确?

2 个答案:

答案 0 :(得分:2)

事实证明,oracle表达式的web ui会自动创建触发器,而不是在插入行对象之前插入此序列中的id。这意味着oracle中的生成器总是落后1。为了解决这个问题,我删除了触发器。

答案 1 :(得分:1)

有两种可能性让人想起:

你说你有一个共享序列。你是否同时插入其他表? (这可以增加序列)。

数据库表上是否有触发器将序列值插入id列?