package org.multibit.mbm.core.model; import com.google.common.collect.Sets; import javax.persistence.*; import java.util.Set; /** * <p>DTO to provide the following to {@link ItemField}:<br> * <ul> * <li>Placeholder for a set of localised text fields</li> * </ul> * </p> */ @Entity @Table(name = "item_field_details") public class ItemFieldDetail { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false) private Long id = null; @Embedded private LocalisedText primaryDetail; // This mirroring of the map key is essential to make the queries work @Column(name = "item_detail", nullable = false) @Enumerated(EnumType.ORDINAL) private ItemField itemField; @ElementCollection(fetch = FetchType.EAGER) @CollectionTable( name = "item_field_secondary_details", joinColumns = @JoinColumn(name = "item_field_id" )) @Column(name = "item_field") private Set<LocalisedText> secondaryDetails = Sets.newLinkedHashSet(); /** * @return The internal ID */ public Long getId() { return id; } public void setId(Long id) { this.id = id; } /** * @return The {@link ItemField} used as the key */ public ItemField getItemField() { return itemField; } public void setItemField(ItemField itemField) { this.itemField = itemField; } /** * @return The primary item field localised text (default locale) */ public LocalisedText getPrimaryDetail() { return primaryDetail; } public void setPrimaryDetail(LocalisedText primaryDetail) { this.primaryDetail = primaryDetail; } /** * @return The secondary item fields' localised text (additional locales) */ public Set<LocalisedText> getSecondaryDetails() { return secondaryDetails; } public void setSecondaryDetails(Set<LocalisedText> secondaryDetails) { this.secondaryDetails = secondaryDetails; } }