2014-04-14 49 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; 
}