1

私はこのような2つのクラスを持っています

package models;
import java.util.*;
import javax.persistence.*;
import play.db.jpa.*;

@Entity
@Table(name = "commitment_type_value")
public class CommittmentTypeValue extends Model{    
    @Id
    @Column(name = "id", nullable = false)
    public Long id;    
    @Column(name = "value", nullable = true)
    public String type;    
    @ManyToOne
    @JoinColumn(name="commitment_type_id")
    public CommitementType commitmentType;    
    public CommittmentTypeValue(){

    }
}

-------------


package models;

import java.util.*;

import javax.persistence.*;

import play.db.jpa.*;


/**
 *
 * @author hatem
 */
@Entity
@Table(name = "commitment_type")
public class CommitementType extends Model{

    @Id
    @Column(name = "id", nullable = false)
    public Long id;

    @Column(name = "type", nullable = true)
    public String type;

    @OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL, mappedBy="commitmentType")
    public List<CommittmentTypeValue> commitmentTypeValues;

    public CommitementType(){

    }
}

アプリを実行すると、この問題が表示されます:

JPA エラーが発生しました (EntityManagerFactory を構築できません): models.CommittmentTypeValue からの models.CommitmentType を参照する外部キーの列数が正しくありません。2である必要があります

何が悪いのか誰か教えてください。

4

3 に答える 3

3

列の名前と正確に一致する必要がある外部キー列名を確認してください。


EDIT 問題がまだ解決されていない場合は、persistance.xml に問題があるかどうかを確認してください。

<property name="generateDdl" value="true" />

すでにある場合は、テーブルの生成でエラーが発生しているかどうかを確認してください。

はいの場合は、テーブルのデータをクリアするか、構成ファイルにドロップアンド作成テーブルオプションを追加するか、次のようにコードを変更します

@ManyToOne(optional=true)
@JoinColumn(name="commitment_type_id", nullable = true)
public CommitementType commitmentType;

テーブルに古いデータがあり、新しいテーブルの作成を停止している可能性があるためです。

于 2012-12-12T08:42:34.050 に答える
0

クラスの多対一結合に参照列名がありませんCommittmentTypeValue

@ManyToOne
@JoinColumn(name="commitment_type_id" referencedColumnName="id" )
public CommitementType commitmentType;  

ターゲットエンティティも指定

@OneToMany(fetch=FetchType.LAZY, cascade = CascadeType.ALL, targetEntity=CommittmentTypeValue.class, mappedBy="commitmentType")
public List<CommittmentTypeValue> commitmentTypeValues;
于 2012-12-12T08:59:06.430 に答える
0

エラーは、CommitementType の Id が複合であるように聞こえるため、外部キーには 2 つの列が含まれている必要があります。

CommitmentType のコードを含めます。

于 2012-12-12T15:51:06.507 に答える