У меня проблема с Hibernate 4.2.7.SP1, и я не знаю, является ли это неправильным использованием или ошибкой. Я использую спящий режим с аннотациями и мой код похож на этих двух объектах:Почему hibernate пытается выполнить искаженный запрос?
Первый объект:
@Entity
@Table(name = "TABLE1")
public class FirstObject {
@Id
@GeneratedValue
private Long id; // database id
private SecondOBject secondObject
//Getters, setters and other stuff here.
}
Второй объект:
@Entity
@Table(name = "TABLE2")
public class SecondObject {
@Id
@GeneratedValue
private Long id; // database id.
@ElementCollection
@CollectionTable(name = "T_MAPTABLE")
private Map<String, Integer> iAmAHashmap;
//More maps similar to the previous one, the getters, setters and other stuff.
}
Конечно много кода опущена, потому что Я думаю, что это не имеет отношения к вопросу.
Когда я выполнить тест, где я создаю объект «FirstObject» с «SecondObject» и попытаться упорствовать его спящий режим, я могу видеть, что спящий режим генерирует этот SQL-код:
Hibernate:
insert
into
TABLE2
values
()
As вы можете видеть, нет параметров и ни значений. Таким образом, исключение запускается:
SqlExceptionHelper [main] - [SQLITE_ERROR] SQL error or missing database (near ")": syntax error)
Карта в SecondObject имеет значения (я напечатал размер карты, чтобы убедиться). Но Hibernate не сохраняет его и пытается сохранить пустые параметры в TABLE2.
Но, если изменить SecondObject и добавить любой параметр (то есть строку):
@Entity
@Table(name = "TABLE2")
public class SecondObject {
@Id
@GeneratedValue
private Long id; // database id.
private String dummyText="hello!";
@ElementCollection
@CollectionTable(name = "MAPTABLE")
private Map<String, Integer> iAmAHashmap;
//More maps similar to the previous one, the getters, setters and other stuff.
}
Код, сгенерированный Hibernate является:
Hibernate:
insert
into
TABLE2
(dummyText)
values
(?)
И по крайней мере, никаких ошибок не показывается (но, очевидно, карта не вставлена).
у меня в hibernate.cfg.xml:
....
<property name="hibernate.hbm2ddl.auto">create-drop</property>
....
И MAPTABLE создается автоматически при выполнении теста.
Тогда у меня есть два вопроса:
Почему Гибернация пытается выполнить запрос без параметров и значений? Почему моя карта не вставлена? (У меня есть эта ошибка во всех моих классах, у которых есть только Карты и другие параметры).
Ах! И я пытаюсь упорствовать в базе данных SQLite ... – JorgeHortelano