Hibernate создает уникальные ограничения, которые мне не нужны и не нужны

1

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

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

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, введя другой объект. Кто-нибудь сталкивался с подобной проблемой в прошлом?

  • 1
    Проверьте это stackoverflow.com/questions/15972549/…
  • 0
    Спасибо за подсказку, но я уже был там. Парень там использует List и Set Я ищу решение, которое будет включать Map .
Показать ещё 1 комментарий
Теги:
hibernate
hsqldb

1 ответ

2
Лучший ответ

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню