Я хочу сделать довольно простую вещь, но не могу заставить ее работать.Hibernate Mapping JPA Collections
У меня есть сущность игры и игрок сущности. Каждая игра должна иметь два внешних ключа от Игроков. И это работает, но есть один улов: я не могу назначить один и тот же внешний ключ от Игрока к нескольким игровым объектам. Откуда это ограничение, и как я могу сказать ему, чтобы он не делал этого?
Я использую Hibernate и JPA. Моя persistence.xml выглядит следующим образом:
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence" version="1.0">
<persistence-unit name="PlayerService" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.connection.username" value="********"/>
<property name="hibernate.connection.password" value="********"/>
<property name="hibernate.connection.url" value="jdbc:postgresql://********"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>
</persistence-unit>
</persistence>
Я получаю EntityManager за:
util = new JPAUtil();
emf = Persistence.createEntityManagerFactory("PlayerService");
em = emf.createEntityManager();
em.getTransaction().begin();
в моей игры-Сущности:
@ElementCollection(targetClass=Player.class)
private Collection<Player> player;
и есть плеер-Entity.
Я делаю это совершенно неправильно?
@Entity
public class Game {
@Id
int gameid;
@OneToMany(mappedBy="game")
private Collection<TestPlayer> test;
}
@Entity
public class TestPlayer {
@Id
int id;
@ManyToOne
@JoinColumn(name="gameid")
private Game game;
}
Когда вы говорите, что я не могу, вы получаете какие-либо ошибки при назначении внешнего ключа? Если да, сообщите нам об ошибке. –
Вызвано: org.postgresql.util.PSQLException: ОШИБКА: дублирующее значение ключа нарушает уникальное ограничение «...» Подробнее: Key (player_playerid) = (1) уже существует. Как сказано, это не намерено, потому что во многих играх может быть один и тот же игрок. – Vertago
Пожалуйста, отредактируйте этот вопрос и добавьте ошибку, чтобы получить правильные ответы. –