Hibernate 5,Oracle12c Identity列-找不到序列

时间:2018-07-06 02:40:31

标签: java identity oracle12c hibernate-5.x

在尝试将个人记录插入数据库时​​,我遇到以下错误。

Caused by: java.sql.SQLSyntaxErrorException: ORA-02201: sequence not allowed here

我正在使用Hibernate 5.2.12.Final,Oracle 12 c数据库,并在数据库中使用Identity列作为'id'。

select 1 from dual

工作。因此,我确定数据库连接成功。

以下是配置:

数据库:

CREATE TABLE person
(
id NUMBER(18) GENERATED ALWAYS AS IDENTITY
            INCREMENT BY 1 START WITH 1 NOT NULL,
name VARCHAR2(40) NOT NULL
);

ALTER TABLE person ADD CONSTRAINT pk_person PRIMARY KEY (id);

HibernateUtil

public class HibernateUtil {
private static StandardServiceRegistry registry;
private static SessionFactory sessionFactory;

public static SessionFactory getSessionFactory() {
    if (sessionFactory == null) {


        StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder()
                .configure(new File("path-to-hibernate.cfg.xml"))
                .build();

        Metadata metadata = new MetadataSources(standardRegistry)
                .addAnnotatedClass(Person.class)
                .addAnnotatedClassName("com.example.entity.Person")
                .getMetadataBuilder()
                .applyImplicitNamingStrategy(ImplicitNamingStrategyJpaCompliantImpl.INSTANCE)
                .build();

        sessionFactory = metadata.getSessionFactoryBuilder()
                .build();


    }
    return sessionFactory;
}

public static void shutdown() {
    if (registry != null) {
        StandardServiceRegistryBuilder.destroy(registry);
    }
}
}

人员实体:

@Entity
@Table(name = "Person")
public class Person implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

public Person(){}

public void setId(Long id) {
    this.id = id;
}

public void setName(String name) {
    this.name = name;
}

public Person(final String name){
    this.name = name;
}

public Long getId() {
    return id;
}

public String getName() {
    return name;
}

@Column(name = "name")
private String name;
}

主要():

Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();

    session.save(new Person("code")); // Error here

    session.getTransaction().commit();
    session.close();

    HibernateUtil.shutdown();

我们非常感谢您的帮助。:)

1 个答案:

答案 0 :(得分:0)

相反,GenerationType.IDENTITY尝试使用GenerationType.SEQUENCE,它应该可以工作,请告诉我是否不是,因为除此之外,您的代码中没有其他问题。