При попытке вставить запись 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();
Любая помощь высоко ценится .:)