У меня возникла проблема с вставкой элементов в @ElementCollection
, представленных картой. При вставке элементов с одинаковыми значениями они не сохраняются. следущие @Entity
и ее @Embeddable
:@ElementCollection Карта @Embeddable не сохраняется, когда значения поля равны
@Entity
@Table(name = "category", catalog = "my_db", schema = "")
public class Category implements Serializable {
@Id
@Column(name = "id")
private Integer id;
@ElementCollection(fetch = FetchType.LAZY, targetClass = CategoryLabels.class)
@CollectionTable(name = "category_labels", joinColumns =
@JoinColumn(name = "category_id"), catalog = "my_db")
@MapKeyColumn(name = "language_id")
private Map<Integer, CategoryLabels> labels = new HashMap<Integer, CategoryLabels>();
...
}
@Embeddable
public class CategoryLabels implements Serializable {
@Column(name = "label1")
private String label1;
@Column(name = "label2")
private String label2;
...
}
записей базы данных
+-------------+-------------+-----------+---------+
| category_id | language_id | label1 | label2 |
+-------------+-------------+-----------+---------+
| 183 | 1 | Capacity | Timings |
| 183 | 2 | | |
+-------------+-------------+-----------+---------+
Установка работает нормально, если label1 и LABEL2 различаются для каждой записи карты (как показано выше).
Но если я добавлю одну запись, которая имеет одинаковые значения для label1 и label2 как другую запись, вторая - , никогда не сохранялась в базе данных. Например, если я добавлю запись на карту с пустыми названиями меток (как и вторая запись в примере), но с language_id = 3, это никогда не будет сохраняться.
Я знаю об этой общей проблеме: http://en.wikibooks.org/wiki/Java_Persistence/ElementCollection#Common_Problems и что внедренные объекты без идентификатора проверяются для своих полей и внешнего ключа @JoinColumns
в качестве идентификатора. В моем случае это не работает, внешний ключ в @JoinColumn
полностью игнорируется для проверки ID.
Это ошибка в Eclipselink или я что-то не так?
EDIT:
Я установил -Declipselink.logging.level=FINEST
и это показывает, что никакие SQLs не выполняется для второго и последующих записей с пустыми этикетками.
Кроме того, я сделал образец проект, с которым вы можете воспроизвести проблему: http://bit.ly/1bR8ywO