当前位置: 首页 > 知识库问答 >
问题:

具有对象引用的JPA复合键

邴子实
2023-03-14

模板实体:

@Entity
@Table(name = "template")
public class Template implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @SequenceGenerator(name="template_se", sequenceName="TEMPLATE_SE", allocationSize=1, initialValue=1)
    @Basic(optional = false)
    @Column(name = "ID")
    private Integer id;

    @Basic(optional = false)
    @Column(name = "NAME", unique = true)
    private String name;

    @OneToMany(cascade = CascadeType.REMOVE, mappedBy = "template")
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<Workflow> workflowList;
}

工作流实体:

@Entity
@Table(name = "workflow")
public class Workflow implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @SequenceGenerator(name="wf_se", sequenceName="WF_SE", allocationSize=1, initialValue=1)
    @Basic(optional = false)
    @Column(name = "ID")
    private Integer id;

    @Basic(optional = false)
    @Column(name = "SEQ_NO")
    private int seqNo;

    @JoinColumn(name = "T_ID", referencedColumnName = "ID", nullable = false)
    @ManyToOne
    private Template template;

    @Basic(optional = false)
    @Column(name = "NAME")
    private String name;
}

指挥实体:

@Entity
@Table(name = "command")
public class Command implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @SequenceGenerator(name="command_se", sequenceName="COMMAND_SE", allocationSize=1, initialValue=1)
    @Basic(optional = false)
    @Column(name = "ID")
    private Integer id;

    @JoinColumn(name = "WORKFLOW_ID", referencedColumnName = "ID")
    @ManyToOne(optional = false)
    private Workflow workflow;
} 

共有1个答案

丰飞龙
2023-03-14

我已经按以下方式把事情做完了。

EmbeddedId类

@Embeddable
public class WorkflowPK implements Serializable {

    @Basic(optional = false)
    @Column(name = "SEQ_NO")
    private int seqNo;

    @JoinColumn(name = "T_ID", referencedColumnName = "ID", nullable = false)
    @ManyToOne
    private Template template;
} 

工作流实体(带有EmbeddedId)

@Entity
@Table(name = "workflow")
public class Workflow implements Serializable {

    @EmbeddedId
    private WorkflowPK id;

    @Basic(optional = false)
    @Column(name = "NAME")
    private String name;
}
@Entity
@Table(name = "template")
public class Template implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @SequenceGenerator(name="template_se", sequenceName="TEMPLATE_SE", allocationSize=1, initialValue=1)
    @Basic(optional = false)
    @Column(name = "ID")
    private Integer id;

    @Basic(optional = false)
    @Column(name = "NAME", unique = true)
    private String name;

    // Refer the filed "template" inside the Composite key of Workflow entity

    @OneToMany(cascade = CascadeType.REMOVE, mappedBy = "id.template")
    @LazyCollection(LazyCollectionOption.FALSE)
    @OrderBy(value = "id.stepSeqNo")
    private List<Workflow> workflowList;
} 
@Entity
@Table(name = "command")
public class Command implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    @SequenceGenerator(name="command_se", sequenceName="COMMAND_SE", allocationSize=1, initialValue=1)
    @Basic(optional = false)
    @Column(name = "ID")
    private Integer id;

    // Refer the Composite key of Workflow entity

    @ManyToOne(optional = false)
    @JoinColumns ({
            @JoinColumn(name="WORKFLOW_SEQ_NO_ID", referencedColumnName = "SEQ_NO"),
            @JoinColumn(name="WORKFLOW_T_ID", referencedColumnName = "T_ID"),
    })
    private WorkflowStep workflow;
} 
 类似资料:
  • 我正在用查询构建一个存储库,该查询使用一个复杂的类型参数进行筛选,如下所示: 类是一个简单的POJO: null 谢了!

  • 我在oracle数据库中有一个包含客户数据的表。以下是一个简化的定义: 此表的主键是。 该表有许多行,其中为空。在数据库级别,没有问题,但是当我试图通过JPA实体访问这些行时,会导致一些问题: 1:使用

  • 我刚刚开始使用Spring数据。带有底层JpaRepository的PagingAndSortingRepository是否可以与使用EmbeddedId对象的具有复合主键的JPA对象一起工作? 我询问的是Spring中的内置支持,因为我知道如果需要,我可以手动实现接口。

  • 问题内容: 我在我的班级结构上定义了一个复合ID,如下所示。不幸的是,我总是收到一个hibernate错误,抱怨找不到的“ part2”: “在实体MoreClass中找不到@IdClass的属性:第2部分” 有人可以帮我解决问题吗?(或者至少在一个有用的jpa / hibernate文档上指向我?) 问题答案: 居然撞到了。 如: 确实可行,我认为这是一个错误。参见https://hiberna

  • 问题内容: 我需要一个表来存储一些评分,在此表中,我有一个 综合索引(user_id,post_id) 和其他列来标识不同的评分系统。 在此表中,我没有 主键, 因为 主键 必须是唯一的,而INDEX不必是唯一的,就我而言,唯一性是一个问题。 例如我可以有 缺少PRIMARY KEY可能会导致性能问题?我的表结构好还是需要更改? 谢谢 问题答案: 几点: 听起来您只是在使用表的当前唯一特性,并将其

  • 我正在尝试将下表映射到JPA中。user_tax和税收以及user_tax和用户之间的关系是一对多的。它使我感到困惑,因为我有一个复合主键,我需要将外键映射到这2个键。 错误消息:< code > org . hibernate . annotation exception:mapped by引用未知的目标实体属性:entity。实体中的Tax.user_tax。UserTax.taxs 这是我的