复合主键与1个外键jpa,toplink



我需要在复合主键上创建一个外键组件标记类别:

@IdClass(SubQuesCompIDs.class)
@Entity
@Table(name="component_marks")
public class ComponentMarks {
     @Id
     private String component_ID;
     @Id
     private String question_ID;
     @Id
     @ManyToOne(targetEntity=ConsolidatedMarks.class)
     @JoinColumn(name="submission_unique_ID", referencedColumnName="submission_unique_ID")
     private ConsolidatedMarks consolidatedMarks;
//***********getters and setters***********
}

SubQuesCompID类:

public class SubQuesCompIDs implements Serializable{
    private ConsolidatedMarks consolidatedMarks;
    private String component_ID;
    private String question_ID;
/****************getters and setter************/
}

ConsolidatedMarks类别:

 public class ConsolidatedMarks {
   @Id
   private String submission_unique_ID;
   /****************getters and setter************/
   }

错误:

   Internal Exception: javax.persistence.PersistenceException: Exception [TOPLINK-28018] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.EntityManagerSetupException
    Exception Description: predeploy for PersistenceUnit [RDEVAL_MySQL_DB] failed.
     Internal Exception: Exception [TOPLINK-7150] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))):       oracle.toplink.essentials.exceptions.ValidationException
      Exception Description: Invalid composite primary key specification. The names of the primary key fields or properties in the primary key class [com.eta.entityBeans.SubQuesCompIDs] and those of the entity bean class [class com.eta.entityBeans.ComponentMarks] must correspond and their types must be the same. Also, ensure that you have specified id elements for the corresponding attributes in XML and/or an @Id on the corresponding fields or properties of the entity class. 
   java.lang.Exception: 
    Exception Description: An exception was thrown while searching for persistence archives with ClassLoader: WebappClassLoader
     context: /ProjectName **
     delegate: false
   ----------> Parent Classloader:
  java.net.URLClassLoader@26b418
   Internal Exception: javax.persistence.PersistenceException: Exception [TOPLINK-28018] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.EntityManagerSetupException
    Exception Description: predeploy for PersistenceUnit [RDEVAL_MySQL_DB] failed.
     Internal Exception: Exception [TOPLINK-7150] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.ValidationException
      Exception Description: Invalid composite primary key specification. The names of the primary key fields or properties in the primary key class [com.eta.entityBeans.SubQuesCompIDs] and those of the entity bean class [class com.eta.entityBeans.ComponentMarks] must correspond and their types must be the same. Also, ensure that you have specified id elements for the corresponding attributes in XML and/or an @Id on the corresponding fields or properties of the entity class. 

在java类"ComponentMarks"的"@IdClass(SubQuesCompIDs.class)"中,它也显示了以下编译错误消息:

   The attribute matching the ID class attribute consolidatedMarks does not have the correct type com.eta.entityBeans.ConsolidatedMarks

ConsolidatedMarks来自包com.eta.entityBeans.

更新组件标记:

 @Entity
 @Table(name="component_marks")
 @IdClass(SubQuesCompIDs.class)
 public class ComponentMarks {
    @Id
    private String component_ID;
    @Id
    private String question_ID;
    @Id
    @Column(name="submission_unique_ID")
    @ManyToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="submission_unique_ID")
    private ConsolidatedMarks consolidatedMarks;
    /****************getters and setter************/
    }

更新的SubQuesCompID:

    public class SubQuesCompIDs implements Serializable{
    private String  consolidatedMarks;
    private String component_ID;
    private String question_ID;
    /****************getters and setter************/
    }

现在,作为编译错误的第二个错误没有合并。

这是一个"派生身份"。

你的@IdClass应该是这样的:

public class SubQuesCompIDs implements Serializable{
    private String consolidatedMarks;
    private String component_ID;
    private String question_ID;
/****************getters and setter************/
}

请注意,与@ManyToOne consolidatedMarks字段对应的字段具有相同的字段名称,但其类型与ConsolidatedMarks主键字段的类型匹配。

JPA 2.1规范第2.4.1节讨论了派生身份。

相关内容

  • 没有找到相关文章

最新更新