Java 在坚持JPA后返回UniqueID

Java 在坚持JPA后返回UniqueID,java,oracle,jpa,uniqueidentifier,Java,Oracle,Jpa,Uniqueidentifier,我在Oracle中有一个唯一的日期+顺序ID。示例:20130307-000021 我的实体对象uniqueID如下所示: @Id // @GeneratedValue // @Basic(optional = false) // @NotNull // @Size(min = 1, max = 15) @Column(name = "UNIQUE_ID") private String uniqueId; 每当我使用@GeneratedValue或其变体时,我都会得到一个“未找到序列”或其他

我在Oracle中有一个唯一的日期+顺序ID。示例:20130307-000021

我的实体对象uniqueID如下所示:

@Id
// @GeneratedValue
// @Basic(optional = false)
// @NotNull
// @Size(min = 1, max = 15)
@Column(name = "UNIQUE_ID")
private String uniqueId;
每当我使用@GeneratedValue或其变体时,我都会得到一个“未找到序列”或其他错误。我试图在持久化一个对象后获取Oracle数据库生成的唯一ID

      this.dbConn.persist(orderDetail);
      this.dbConn.flush();
      //this.dbConn.refresh(orderDetail);
      //OrderDetails od = new OrderDetails();
      //od =(OrderDetails)this.dbConn.getEntityManagerFactory().getPersistenceUnitUtil().getIdentifier(orderDetail); 

以上是我尝试过的各种方法。当我使用refresh时,会出现一个错误,显示“找不到实体”(我假设它是根据预先保存的uniqueID null来查找实体的。是否有可能返回自动生成的日期+序列号?我可以通过查看插入的对象并直接复制uniqueID来保存和检索对象,但显然这是无用的。非常感谢您的帮助,如果您愿意我很想看到错误消息等,请告诉我。我四处搜索,看到的“解决方案”似乎就是我正在尝试的,或者有人说他使用了“暴力破解”,但没有说明这意味着什么。

对于可能发生这种情况的任何人。我保留了数据库触发器,只使用了:

 @Id
 @Basic(optional = false)
 @NotNull
 @Size(min = 1, max = 15)
 @Column(name = "ORDER_ID")
 private String orderId;

我不需要使用@GeneratedValue或其任何变体。

这是一个鸡和蛋的问题。如果您的ID是由触发器生成的(我假设是这样的),您需要另一个唯一ID才能获取刚刚插入的行并从中获取触发器生成的ID。为什么不先生成ID,然后将其分配给实体并将其持久化?感谢您的响应。我们希望数据库生成唯一ID,而不是代码。也许我们可以让数据库生成没有日期戳的序列。从我读过的示例来看,我可以通过@generatedvalue(strategy=generationtype.sequence)引用该序列?如果我只尝试一个简单的序列,这是我可能的触发器:
如果插入,那么如果:new.UNIQUE\u ID为null,然后从DUAL;end if;end if;
中选择ourSchema.USERS\u seq.nextval到:new.UNIQUE\u ID,那么在我的实体中指定:
@GeneratedValue是否正确(strategy=GenerationType.SEQUENCE)
@GeneratedValue(generator=“my_seq”)
@SequenceGenerator(name=“my_seq”,sequenceName=“USERS_seq”,allocationSize=1)
?以上解决了我的问题,我只是没有使用@GeneratedValue(strategy=GenerationType.SEQUENCE),而是使用了下面的两个。