Я использую Hibernate с базой данных SQLite. У меня есть следующий класс:
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class Authority {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int idAuthority;
(...)
Затем у меня есть класс Author, который расширяет полномочия и добавляет 4 или 5 полей.
Когда я пытаюсь сохранить объект Author, Hibernate генерирует следующий запрос:
Hibernate: insert into Authority values ( )
И sqlite это не нравится.
Если я добавлю фиктивное поле String, например «private String test», и установлю это свойство в конструкторе, все будет работать нормально.
Я совершенно новичок в спящем режиме, поэтому я не уверен, что делать дальше. У вас есть идеи?
Редактировать : В соответствии с запросом отображение класса Author:
@Entity
@Table(name="Authors")
@PrimaryKeyJoinColumn(name="idAuthority")
public class Author extends Authority {
@Column(name = "firstName")
protected String firstName;
@Column(name = "lastName")
protected String lastName;
@Column(name = "alias")
protected String alias;
(...)
}
Редактировать : По запросу (бис), вставить код:
public void save(Object data) {
currentSession.saveOrUpdate(data);
}
Ничего особенного ...
И чтобы дать вам больше потенциальных клиентов, вот схема базы данных:
create table Authority (idAuthority integer, primary key (idAuthority))
create table Authors (alias varchar, firstName varchar,
lastName varchar, idAuthority bigint not null, primary key (idAuthority))
N.B. : в SQLite целое число, являющееся первичным ключом, автоматически устанавливается равным AUTO-INCREMENT.
Возникло следующее исключение:
java.sql.SQLException: near ")": syntax error
Запрос должен быть больше похож на вставку в значения Authority (NULL), чтобы SQLite выполнял автоинкремент, а не эту странную «вставку в значения Authority ()».
Редактировать: Это определенно проблема с пакетом SqlLite для Hibernate. Я только что попробовал с Hsqldb, и он дает мне правильный запрос:
insert into Authority (idAuthority) values (default)
(Тогда это тоже не получается, но по совершенно другим причинам: p).
Я не уверен, что есть решение этой проблемы ... кроме использования другой БД.