2017-05-17 6 views
0

私はそれがtrivalだと思っていますが、自分の論理エラーを認識できません。エンティティの関連するリスト。正しいエンティティではなくヌルでリストを取得する

だから私はしている:

@Entity 
@Table(name = "PROJECT")) 
@SequenceGenerator(name = "project_seq_generator", allocationSize = 20, 
initialValue = 1, sequenceName = "project_seq") 
public class Project implements Serializable, Cloneable { 

    /** The cost centres. */ 
    @OneToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER) 
    @JoinColumn(name = "projectid") 
    private List<Center> costCentres = new ArrayList<Center>(); 

    ... 

} 

あり、他の変数があるが、この質問

他の側面のための貴重なではありません - Center、このマップされていません。

ゲッターでcostCentresを取得しようとすると、nullの値を持つリストが表示されます。

このマッピングに問題はありますか?

通常はプロジェクトを追加できますが、関連するプロジェクトIDを持つデータベースが通常はあります。

もう1つ質問があります。これらを取得する基準を作成することはできますかCenter?私はそれをフェッチする方法

public ProjectDTO getProjectByID(int projectID) { 
    Project project = null; 
    try { 
     project = (Project) session.get(project.class, projectID); 
    } catch(HibernateException e) { 
     // blabla 
    } 
    return convertToProjectDTO(project); 
} 

とルート:

public ProjectDTO getProjectByID(int projectID) throws HibernateException { 
    Transaction tx = null; 
    Session session = HibernateUtils.getNewSession(); 
    ProjectDTO result = null; 
    ProjectManager manager = new ProjectManager(session); 
    try { 
     tx = session.beginTransaction(); 
     result = manager.getProjectByID(projectID); 
     tx.commit(); 
    } catch(Exception e) { 
     // Bla BLa 
    } finally { 
     HibernateUtils.conditionalRollback(session); 
    } 

    return result; 
} 

休止状態ではない、にconvertToの問題でした。あなたはフィールドでそれを初期化するので、あなたがNULLでリストを取得し、私のダム

+1

「costCentres」をどのように取得していますか?いくつかのコードを投稿してください! –

+0

Centerエンティティを読み込むときに、hibernateによって生成されるsqlクエリは何ですか? –

+0

'convertToProjectDTO'のコードを含めることができますか? – Naros

答えて

0

のため申し訳ありませんが、メソッドにconvertTo のコードでは

return null; 

に問題だった

質問もはや有効ではありません

宣言なし最終単語。

あなたはArrayListの初期化が必要な場合は、3つのオプション

を持っているが、ゲッターでそれを行う:

public List<Center> getCostCentres() { 
if (costCentres==null)return new ArrayList<Center>(); 
    return costCentres; 
} 

それとも、

private final List<Center> costCentres = new ArrayList<Center>(); 

またはinitとして最終単語を追加することができますそれはコンストラクタ内にあります。

+0

本当に、その理由がありますか? – Razikus

+0

@Razikus試してみることができますか? –

+0

今は、私は今私の場所を終了する原因。 – Razikus

関連する問題