JPA2: Можем ли мы использовать несколько @ElementCollection в сущности? - PullRequest
1 голос
/ 02 марта 2012

Вот урезанная версия моего кода:

@Entity
public class Item implements Serializable{

@Id
@GeneratedValue
private long id;

@ElementCollection(fetch=FetchType.EAGER ,targetClass=Cost.class)
@CollectionTable(name="ItemCost", joinColumns = {@JoinColumn(name="itemId")})
private Set<Cost> costs= new HashSet<Cost>();

@ElementCollection(fetch=FetchType.EAGER ,targetClass=ItemLocation.class)
@CollectionTable(name="ItemLocation", joinColumns = {@JoinColumn(name="itemId")})
private Set<ItemLocation> itemLocations;

}

Разрешен ли вышеуказанный код? У меня есть два встраиваемых класса Cost и ItemLocation, которые я использую с @ElementCollection.

Issue: Когда я пытаюсь запустить именованный запрос

@NamedQuery(name = "Item.findAll", query = "SELECT i FROM Item i")

У меня странное поведение. Записи во второй коллекции элементов (таблица ItemLccation) дублируются (вставляются в таблицу).

1 Ответ

0 голосов
/ 02 марта 2012

Что касается JPA 2.0, ваш код разрешен. Совершенно законно иметь несколько коллекций, аннотированных ElementCollection. Кроме того, это, скорее всего, не имеет никакого отношения к вашей проблеме. Кстати, чтобы узнать, действительно ли это ваша проблема, вы пробовали свой код без сбора затрат?

В какой момент дубликаты в этой коллекции встречаются впервые? Если ItemLocation не определяет equals & hashcode, дубликаты могут легко появиться в результате добавления элементов самостоятельно.

Возможно, вы столкнулись с этой проблемой: Первичные ключи в CollectionTable и выбор типа в списке и добавление @OrderColumn поможет.

...