0

次のエンティティクラスと複合主キー用の別のクラスがあります

エンティティクラス

@Entity
@Table(name = "PROJECTS")
public class Project {
private Integer SlNo;
private Long projectNo;
private Date projectDate;

@EmbeddedId
ProjectPK projectPK;

主キークラス

public class ProjectPK implements Serializable {

private Integer SlNo;
@Column(name = "project_no", insertable = false, updatable = false)
private Long projectNo; 

public ProjectPK(){
}
// with getters and setters and equals and hashCode implementation 

問題は、次の例外が発生することです

:org.hibernate.MappingException:Repeated column in mapping for entity
: test.Project column: projectNo (should be mapped with
insert="false" update="false")

クラスに以下を追加しましたProject Entityが、同じ例外が発生します

@Column(name = "project_no", insertable = false, updatable = false)

編集1

CriteriaBuilder cb = entityManager.getCriteriaBuilder();

CriteriaQuery<Long> countQ = cb.createQuery(Long.class);
Root<Project> empCount = countQ.from(Project.class);
countQ.select(cb.count(empCount));

TypedQuery<Long> countquery = entityManager.createQuery(countQ);// error in this line
4

4 に答える 4

3

フィールドを 2 回SlNo宣言するのはなぜですか? それらをクラスprojectNoから削除するだけで問題ありません。Project

または、さらに良いことに、クラスを削除してProjectPKクラスを次のように変更しProjectます (このメソッドは Hibernate でのみ機能することに注意してください)。

@Entity
@Table(name = "PROJECTS")
public class Project implements Serializable {

  @Id
  private Integer SlNo;

  @Id
  private Long projectNo;

  private Date projectDate;
}
于 2013-03-18T11:50:19.503 に答える
1

To achieve your desired behavior, you can use the @IdClass annotation as shown below -

http://docs.oracle.com/javaee/5/api/javax/persistence/IdClass.html

Here is the modified code -

@Entity
@Table(name = "PROJECTS")
@IdClass(ProjectPK.class)
public class Project {
   @Id
   private Integer SlNo;

   @Id
   private Long projectNo;

   private Date projectDate;
}


public class ProjectPK implements Serializable {

    @Column(name="sl_no")
    private Integer SlNo;

    @Column(name = "project_no")
    private Long projectNo; 
}
于 2013-03-18T14:52:42.737 に答える
0

次の方法で問題を解決しました

@Entity
@Table(name = "PROJECTS")
public class Project {
@Column(name = "SL_NO" , insertable = false, updatable = false)
private Integer SlNo;
@Column(name = "PROJECT_NO" , insertable = false, updatable = false)
private Long projectNo;
private Date projectDate;

@EmbeddedId
ProjectPK projectPK;

および主キー クラス

@Embeddable
public class ProjectPK implements Serializable {
@Column(name = "SL_NO")
private Integer SlNo;
@Column(name = "PROJECT_NO")
private Long projectNo; 

//with hashCode and equals implementation
于 2013-03-18T18:13:18.310 に答える