Note that there are some explanatory texts on larger screens.

plurals
  1. PODeclare JPA entity for a tree element
    primarykey
    data
    text
    <p>I do have a DB table with unidirectional trees. Leafs of these trees can have several children/parents. Cycles are restricted. Here is my DB table definition:</p> <pre><code>CREATE MULTISET TABLE WORKFLOW_SEQ_REL ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT, DEFAULT MERGEBLOCKRATIO ( WORKFLOW_SEQ_ID INTEGER NOT NULL, REL_WORKFLOW_SEQ_ID INTEGER NOT NULL, JOB_ID BIGINT) PRIMARY INDEX ( WORKFLOW_SEQ_ID ); </code></pre> <p>As you can see it doesn't have a primary key right now. But it would appear later :) Really PK is: JOB_ID+PARENT_ID+CHILD_ID. </p> <p>The idea is:</p> <ol> <li>REL_WORKFLOW_SEQ_ID = PARENT </li> <li>WORKFLOW_SEQ_ID = CHILD </li> <li>JOB_ID = TREE_IDENTIFICATOR (a determinant to separate different trees stored in one table).</li> </ol> <p>I'm trying to declare a JPA entity:</p> <pre><code>@Entity @Table(name="WORKFLOW_SEQ_REL") public class EtlWorkflowSeqNode { @EmbeddedId public EtlWorkflowSeqNodeId etlWorkflowSeqNodeId; //@Column(name="JOB_ID") //public Integer jobId; @Embeddable class EtlWorkflowSeqNodeId{ @Column(name="JOB_ID") public Integer jobId; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name="REL_WORKFLOW_SEQ_ID") //EtlWorkflowSeq.id = PK of EtlWorkflowSeq entity public EtlWorkflowSeq parent; @OneToMany(fetch=FetchType.EAGER /*, mappedBy="parent"*/) @JoinColumn(name="WORKFLOW_SEQ_ID") public Set&lt;EtlWorkflowSeq&gt; children; } } </code></pre> <p>And I gen an error: <strong>Caused by: org.hibernate.AnnotationException: A Foreign key refering models.EtlWorkflowSeqNode from models.EtlWorkflowSeq has the wrong number of column. should be 2</strong></p> <p>Here is EtlWorkflowSeq entity:</p> <pre><code>@Entity @Table(name="WORKFLOW_SEQ") public class EtlWorkflowSeq { @Id @Column(name="WORKFLOW_SEQ_ID") public Integer id; @OneToOne(fetch=FetchType.EAGER) @JoinColumn(name="WORKFLOW_ID") public EtlWorkflow etlWorkflow; } </code></pre> <p>What do I do wrong?</p> <p>UPD: Here are table definitions: --a bad design. PK should be: WORKFLOW_SEQ_ID + REL_WORKFLOW_SEQ_ID + JOB_ID </p> <pre><code> CREATE MULTISET TABLE WORKFLOW_SEQ_REL ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT, DEFAULT MERGEBLOCKRATIO ( WORKFLOW_SEQ_ID INTEGER NOT NULL, --a ref to child REL_WORKFLOW_SEQ_ID INTEGER NOT NULL, -- a ref to parent START_TYPE_ID SMALLINT NOT NULL, -- a type of connection DISABLE_START_TYPE_ID SMALLINT, -- other type of connection JOB_ID BIGINT) -- a tree determinant, PRIMARY INDEX ( WORKFLOW_SEQ_ID ); CREATE MULTISET TABLE WORKFLOW_SEQ ,NO FALLBACK , NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM = DEFAULT, DEFAULT MERGEBLOCKRATIO ( WORKFLOW_SEQ_ID INTEGER NOT NULL, -- an id WORKFLOW_ID BIGINT NOT NULL, -- a ref to original workflow, not interesting IS_NAME VARCHAR(255) CHARACTER SET UNICODE NOT CASESPECIFIC, -- some name INFO_SYSTEM_INST_CD VARCHAR(255) CHARACTER SET UNICODE NOT CASESPECIFIC, -- other name DISABLE BYTEINT) -- so garbage UNIQUE PRIMARY INDEX ( WORKFLOW_SEQ_ID ); -- it should also be a PK </code></pre> <p>The Idea is that several trees are stored in WORKFLOW_SEQ_REL JOB_ID is a determinant for trees. WORKFLOW_SEQ_ID, REL_WORKFLOW_SEQ_ID refer some cutomized template from REL_WORKFLOW_SEQ table.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload