2014-04-14 47 views
0

我在创建具有对象引用的JPA复合关键字时遇到了一些问题。实体是如显示在波纹管,具有对象引用的JPA复合关键字

1)I湾,以除去从工作流实体的ID字段和制成一复合物键相结合SEQNO字段和模板(对象引用)字段

2 )根据更改更新现有的关系命令实体(@JoinColumn(name =“WORKFLOW_ID”,referencedColumnName =“ID”))

谢谢。

模板实体:

@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; 
} 

回答

2

我有事情按照以下方式完成。

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; 
}