序列发生器:JAVA / JPA / SPRING

时间:2018-09-05 07:13:14

标签: java oracle jpa spring-data-jpa

问题:是否可能不使用从double中选择selectSequence来生成序列号; ?

问题:默认情况下,@GeneratedValue@SequenceGenerator使用select someSequence from dual;来获取我的id的下一个值。但是我的用户没有从双重表中选择的权限,因此我只能使用id = sequence.nextval,但我不知道如何在Entity类中使用它。还是应该将id值传递给诸如sequence.nextval之类的实体构造函数?

用法:Oracle DB,CrudRepository,save()方法。

3 个答案:

答案 0 :(得分:1)

我认为您需要编写自己的策略并使用GenericGenerator注释。这个答案可能对您有帮助:link

答案 1 :(得分:0)

您可以在以下查询的帮助下插入ID:

select max(id) from <<tableName>>;

如果无法从对偶表中进行选择,则可以查询自己的表,找到最大ID,将其递增1 ,并将其分配为新ID。

答案 2 :(得分:0)

您需要首先在Oracle中创建序列:

CREATE SEQUENCE USER_SEQUENCE START WITH 1 INCREMENT BY 10;

然后注释您的班级,如下所示:

@Entity
@SequenceGenerator(name="USER_SEQUENCE_GENERATOR", sequenceName="USER_SEQUENCE", initialValue=1, allocationSize=10)
public class User {
    @Id
    @Column(name="USER_ID")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="USER_SEQUENCE_GENERATOR")
    private Long userId;
}