Hibernate 5, столбец идентификаторов Oracle12c - последовательность не найдена - PullRequest
0 голосов
/ 06 июля 2018

При попытке вставить запись Person в БД возникает следующая ошибка.

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

Работает. Поэтому я уверен, что соединение с БД прошло успешно.

Ниже приведен конфиг:

DB:

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;
}

main ():

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

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

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

    HibernateUtil.shutdown();

Любая помощь высоко ценится .:)

1 Ответ

0 голосов
/ 06 июля 2018

Вместо GenerationType.IDENTITY попробуйте использовать GenerationType.SEQUENCE, и оно должно работать, дайте мне знать, если это не так, потому что в вашем коде ничего не выглядит неправильно, кроме этого.

...