Почему hibernate пытается выполнить неверный запрос?

У меня проблема с 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 ( ) 

Как вы можете видеть, нет параметров и ни значений. Поэтому запускается исключение:

  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 создается автоматически при выполнении теста.

Тогда у меня есть два вопроса:

Почему hibernate пытается выполнить запрос без параметров и значений? Почему моя карта не вставлена? (У меня есть эта ошибка во всех моих классах, у которых есть только Карты и другие параметры).

    Я не знаю, опустили ли вы его, поскольку FirstObject <-> SecondObject – это отношение с внешним ключом внутри db, вам нужно указать, что с аннотациями. Здесь вы можете найти примеры для разных типов отношений, с примерами и дополнительными пояснениями: http://en.wikibooks.org/wiki/Java_Persistence/Relationships

    OneToOne-Relationship будет выглядеть так, чтобы JPA знал, что такое внешний ключ.

     @OneToOne @JoinColumn(name="ID") private SecondObject secondObject; 

    То же самое касается коллекции: http://en.wikibooks.org/wiki/Java_Persistence/ElementCollection. В CollectionTable-Annotation есть атрибут joinColumn для указания отношения внешнего ключа.