Hibernate生成我不想要也不需要的唯一约束



我有以下问题。

这是我的实体。

测试团队.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。过去有人遇到过类似的问题吗?

我通过将@ElementCollection更改为@ManyToMany注释来解决我的问题。

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

相关内容

最新更新