gpt4 book ai didi

java - 无法在 PLAY 2.0 中使用外键创建复合主键

转载 作者:搜寻专家 更新时间:2023-11-01 03:54:58 27 4
gpt4 key购买 nike

这是我想在我的 PLAY 项目中表现的情况:

table clients {
client_id (pk),
description
}

table items {
client_id (fk, pk),
item_id (pk)
}

在“items”表中,我想要一个复合主键,它由组合的 client_id 和 item_id 组成。我已阅读 JPA 文档以及有关该主题的许多帖子,但一切都一次又一次地失败。这是我尝试过的众多版本之一 - 最接近 JPA 文档。

@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) {...
}

上述代码(以及许多其他不同的设置)在 Play 启动期间产生以下错误:

java.lang.RuntimeException: Error reading annotations for models.ItemsPK at com.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 的主要目标是什么吗?使用 Ebean ORM,您的两个模型都非常小且容易

模型/Client.java

package models;

import play.db.ebean.Model;
import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Client extends Model {
@Id
public Long id;
public String description;
}

模型/Item.java

package models;

import play.db.ebean.Model;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

@Entity
public class Item extends Model {
@Id
public Long id;

@ManyToOne
public Client client;
}

就是这样。除了复合PK,它给了你你所需要的

关于java - 无法在 PLAY 2.0 中使用外键创建复合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10723465/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com