Arhn - архитектура программирования

Спящий режим создает уникальное ограничение, которое мне не нужно и не нужно

У меня следующая проблема.

Вот мои сущности.

TestTeam.java

package utils;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "TEST_TEAM")
public final class TestTeam implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = -7275223441128447981L;

    @Id
    @Column(name = "NAME")
    private String name;

    @OneToMany(mappedBy = "playerId", cascade = CascadeType.ALL)
    private List<TestPlayer> test1List;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<TestPlayer> getTest1List() {
        return test1List;
    }

    public void setTest1List(List<TestPlayer> test1List) {
        this.test1List = test1List;
    }

    public TestTeam() {
    }

    public TestTeam(final String name, final List<TestPlayer> test1List) {
        this.name = name;
        this.test1List = new ArrayList<>(test1List);
    }
}

TestPlayer.java

package utils;

import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import javax.persistence.CascadeType;
import javax.persistence.CollectionTable;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "TEST_PLAYER")
public class TestPlayer implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = -2792602076488917813L;

    @Id
    private long playerId;

    @Column(name = "NAME", nullable = false)
    private String playerName;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "TEAM_NAME")
    private TestTeam team;

    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name = "PREVIOUS_TEST_TEAM")
    private Map<Integer, TestTeam> previousTests = Collections.emptyMap();

    public TestPlayer() {
        // TODO Auto-generated constructor stub
    }

    public TestPlayer(final long playerId) {
        this.playerId = playerId;
    }

    public String getName() {
        return playerName;
    }

    public void setName(String name) {
        this.playerName = name;
    }

    /**
     * @return the team
     */
    public TestTeam getTeam() {
        return team;
    }

    /**
     * @param team the team to set
     */
    public void setTeam(TestTeam team) {
        this.team = team;
    }

    public Map<Integer, TestTeam> getPreviousTests() {
        return previousTests;
    }

    public void setPreviousTests(Map<Integer, TestTeam> previousTests) {
        this.previousTests = previousTests;
    }

    public TestPlayer(final String name,
            final Map<Integer, TestTeam> previousTests) {
        this.playerName = name;
        this.previousTests = new HashMap<>(previousTests);
    }
}

Следующий аннотированный сборник.

  @ElementCollection(fetch = FetchType.EAGER)
  @CollectionTable(name = "PREVIOUS_TEST_TEAM")
  private Map<Integer, TestTeam> previousTests = Collections.emptyMap();

по умолчанию создает уникальное ограничение для внешнего ключа из объекта TestTeam.

create table PLAYERS_PREVIOUS_TEAMS (
    Player_ID bigint not null,
    previousTeamMap_NAME varchar(255) not null,
    previousTeamMap_KEY integer,
    primary key (Player_ID, previousTeamMap_KEY)
)

alter table PLAYERS_PREVIOUS_TEAMS 
    add constraint UK_f7nfahws0ttuhe5p7lpxt3vfv  unique (previousTeamMap_NAME)

Мне не нужно это ограничение, и я хотел бы отключить это поведение, чтобы Hibernate не генерировал его. Я потратил некоторое время на поиски в Интернете, но ничего не нашел. Я не хочу представлять @OneToMany и многие @ManyToOne, вводя другую сущность. Кто-нибудь сталкивался с подобной проблемой в прошлом?

02.09.2014

  • Проверьте это stackoverflow.com/questions/15972549/ 02.09.2014
  • Спасибо за подсказку, но я уже был там. Там парень использует List и Set. Я ищу решение, которое включало бы Map. 02.09.2014
  • Собственно, добавление @ManyToMany решило проблему. Если вы опубликуете свой комментарий в качестве ответа, я приму его. В противном случае я опубликую ответ на свой вопрос. 02.09.2014

Ответы:


1

Я решил проблему, изменив аннотацию @ElementCollection на @ManyToMany.

@ManyToMany(fetch = FetchType.EAGER)
@CollectionTable(name = "PREVIOUS_TEST_TEAM")
private Map<Integer, TestTeam> previousTests = Collections.emptyMap();
02.09.2014
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..