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

标签 java jpa playframework-2.0 ebean

这是我想在我的 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/

相关文章:

java - play framework migrate to 2.1.1让我很头疼

routes - `play dist` , `main.css` 返回 404

java - IntelliJ 和 Play 框架 : "` scala-library` has broken sources path"

java - struts2 创建 session 对象,为什么以及何时?

java - 模拟 org.springframework.web.reactive.function.client.WebClient.ResponseSpec#onStatus 输入参数

java - Cloudera sqoop 在导入时将某些列映射到空值

mysql - JPA 调用很长 - 如何检查问题是来自 jpa 还是来自 mysql

java - 创建新的 NamedQuery 或构建新的 List 以返回字段值?

java - JPA AttributeConverter 是否有可能知道有关 Entity 正在运行的任何信息?

java - 如何在 Play Framework 中上传文件?