我有以下实体(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不正确?
答案 0 :(得分:2)
事实证明,oracle表达式的web ui会自动创建触发器,而不是在插入行对象之前插入此序列中的id。这意味着oracle中的生成器总是落后1。为了解决这个问题,我删除了触发器。
答案 1 :(得分:1)
有两种可能性让人想起:
你说你有一个共享序列。你是否同时插入其他表? (这可以增加序列)。
数据库表上是否有触发器将序列值插入id列?