Дубликаты записей в таблице соединений.Использование Hibernate, Spring - PullRequest
1 голос
/ 10 января 2012

У меня есть 3 таблицы:

Entity

CREATE TABLE `entity` (
  `entity_number` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(6) DEFAULT NULL,
  `name` varchar(45) NOT NULL,
  `surname` varchar(45) NOT NULL,
  `id_number` varchar(13) DEFAULT NULL,
  `gender` varchar(7) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `date_of_birth` datetime DEFAULT NULL,
  `preferred_language` varchar(10) DEFAULT NULL,
  `ethnic_group` varchar(15) DEFAULT NULL,
  `username` varchar(20) DEFAULT NULL,
  `password` varchar(45) DEFAULT NULL,
  `status` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`entity_number`),
  UNIQUE KEY `id_number_UNIQUE` (`id_number`)
)

Контакты

CREATE TABLE `contacts` (
  `contact_id` int(11) NOT NULL AUTO_INCREMENT,
  `contact_type` varchar(25) NOT NULL,
  `value` varchar(100) NOT NULL,
  PRIMARY KEY (`contact_id`),
  UNIQUE KEY `contact_id_UNIQUE` (`contact_id`)
)

con_contact_entity

CREATE TABLE `con_contact_entity` (
  `entity_number` bigint(20) NOT NULL,
  `contact_id` int(11) NOT NULL,
  PRIMARY KEY (`entity_number`,`contact_id`),
  KEY `FK_ENTITY_NUMBER` (`entity_number`),
  KEY `FK_CONTACT_ID` (`contact_id`),
  CONSTRAINT `FK_CONTACT_ID` FOREIGN KEY (`contact_id`) REFERENCES `contacts` (`contact_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_ENTITY_NUMBER` FOREIGN KEY (`entity_number`) REFERENCES `entity` (`entity_number`) ON DELETE NO ACTION ON UPDATE NO ACTION
)

Тогда у меня есть 3 моих pojos: (вставлены только соответствующие части)

Entity

@javax.persistence.Entity
@Table (name = "ENTITY")
@Inheritance (strategy = InheritanceType.JOINED)
public class Entity {

@ManyToMany (targetEntity = Contact.class, cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER)
    @JoinTable (name = "con_contact_entity", joinColumns = @JoinColumn (name = "entity_number"), inverseJoinColumns = @JoinColumn (name = "contact_id"))
    private Set<Contact> contactInfo;

...
}

Контакт

@XmlAccessorType (XmlAccessType.NONE)
@XmlType (name = "Contact", propOrder = {"typeOfContact", "contactValue"})
@Entity @Table (name = "CONTACTS")
public class Contact {

@Id
    @GeneratedValue
    private Long contact_id;

    @XmlElement (name = "TypeOfContact", required = true, nillable = false)
    @Column (name = "contact_type") @Enumerated (EnumType.STRING)
    private ContactType typeOfContact;

    @XmlElement (name = "ContactValue", required = true, nillable = false)
    @Column (name = "value")
    private String contactValue;

...
}

Если я добавлю JOE как сущность с контактными данными (Type = HomeTel, Value = 123456789), а затем добавлю жену JOE, которая хочет добавить те же контактные данные, в дубликате таблицы контактов появится дублирующаяся запись. Как я могу сделать проверку гибернации на наличие дубликата, и, если найден, просто ссылаться на эти контактные данные в таблице con_contact_entity.

Пример: данные таблицы результатов будут:

**ENTITY**
123   MR   JOE   ....
124   MRS  JANE  ....

**CON_CONTACT_ENTITY**
123   1
124   1

**CONTACTS**
1   HOMETEL   123456789
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...