我想做一个非常简单的事情,但无法让它工作。休眠映射JPA集合
我有ab实体游戏和实体玩家。每场比赛应该有两个来自球员的外键。它有效,但有一个问题:我不能将来自Player的同一个外键分配给多个游戏实体。这个限制来自哪里,我怎么告诉他不要那样做?
我正在使用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
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
请编辑该问题并添加错误以获得正确答案。 –