创建外键复合主键这是一个情况下,我想在我的播放项目表示:无法在播放2.0
table clients {
client_id (pk),
description
}
table items {
client_id (fk, pk),
item_id (pk)
}
在“项目”表我想有一个复合主键这将包含组合的client_id和item_id。我已阅读JPA文档以及该主题上的许多帖子,但所有内容都一次又一次地失败。这是我尝试过的许多版本之一 - 最接近JPA文档。在COM错误读取注解 models.ItemsPK :
@Entity
@Table(name = "items")
public class Items extends Model {
ItemsPK primaryKey;
public Items() {
}
@EmbeddedId
public ItemsPK getPrimaryKey() {
return primaryKey;
}
public void setPrimaryKey(ItemsPK pk) {
primaryKey = pk;
}
}
@Embeddable
public class ItemsPK implements Serializable {
private long itemId;
private Client client;
public ItemsPK() {
}
@Column(name = "item_id")
@GeneratedValue(strategy = GenerationType.AUTO)
public long getItemId() {
return itemId;
}
public void setItemId(long itemId) {
this.itemId = itemId;
}
@ManyToOne
@JoinColumn(name = "client_id", nullable = false)
public Client getClient() {
return client;
}
public void setClient(Client client) {
this.client = client;
}
//public int hashCode() {...
//public boolean equals(Object obj) {...
}
上面的代码(以及其他许多不同的设置)游戏推出时会产生以下错误:
了java.lang.RuntimeException。 avaje.ebeaninternal.server.deploy.parse.ReadAnnotations.readAssociations(ReadAnnotations.java:73) 〜[ebean.jar:na] at com.avaje.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1100 ) 〜[ebean.jar:na]
我不知道我的代码可能有什么问题。我开始认为这是一个PLAY错误。有任何想法吗?
你有一个坚实的理由坚持复合PK?即使您设法处理这个问题,您也可能因此面临其他几个问题。为什么不在item表中添加一个额外的列(比如items_id),并在(client_id,item_id)上添加一个唯一索引。 (我想item_id是指物品表,就像client_id引用客户表一样)。 – bpgergo
@bpgergo谢谢你的回答。你的解决方案是可以接受的,但我宁愿避免额外的列和索引。令我惊讶的是,这样一个简单的案例需要解决。如果几天内没有解决方案,我会重新考虑。至于item_id,目前它并没有引用任何其他表,但将来可能会改变。 – Grzywa
标签:hibernate **在这里不正确。没有Hibernate也没有JPA – ses