2017-12-07 6 views
1

私はhibernateとjpaで新しいです。私は少し助けが必要です。私は春のブートで安らかなサービスアプリケーションを開発しています。 mysqlとhibernateを使うマップされたリストが空なのはなぜですか?

私のサービス「成分」配列を呼び出すと、そのように空になります。データベースの成分表とレシピテーブルで Empty array

は一対多の関係を持っているので、私はJPAと同じことを実行しようとしましたが、私は、正しい方法を見つけることができません。レシピを取得しようとするとアクセスできますが、成分リストは常に空です。

私のデータベース設計: DB Design

レシピエンティティ:

import lombok.Getter; 
import lombok.Setter; 

import javax.persistence.*; 
import java.util.ArrayList; 
import java.util.HashSet; 
import java.util.List; 
import java.util.Set; 

@Entity() 
@Table(name="recipe") 
@Getter 
@Setter 
public class Recipe { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "recipe_id") 
    private int recipeId; 

    @Column(name ="name") 
    private String name; 

    @Column(name = "description") 
    private String description; 

    @Column(name = "picture_id") 
    private int pictureId; 

    @OneToMany(mappedBy = "recipe",fetch = FetchType.EAGER) 
    private List<Ingredient> ingredients = new ArrayList<>(); 


} 

成分Entitiy:

import lombok.Getter; 
import lombok.Setter; 

import javax.persistence.*; 
import java.io.Serializable; 

@Entity() 
@Table(name = "ingredient") 
@Getter 
@Setter 
public class Ingredient implements Serializable{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "ingredient_id") 
    private int ingredientId; 

    @Column(name = "scale") 
    private String scale; 

    @ManyToOne 
    @JoinColumn(name = "recipe_id",nullable = false) 
    private Recipe recipe; 

    @ManyToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "material_id",nullable = false) 
    private Material material; 

} 

RecipeDAO:

import com.mutfak.dolapservice.dao.interfaces.IRecipeDAO; 
import com.mutfak.dolapservice.entity.Recipe; 
import org.springframework.stereotype.Repository; 
import org.springframework.transaction.annotation.Transactional; 

import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 
import java.util.List; 

@Transactional 
@Repository 
public class RecipeDAO implements IRecipeDAO { 

    @PersistenceContext 
    private EntityManager entityManager; 

    @SuppressWarnings("unchecked") 
    @Override 
    public List<Recipe> getRecipes() { 
     String query = "FROM Recipe ORDER BY recipe_id"; 

     return (List<Recipe>) entityManager.createQuery(query).getResultList(); 
    } 

    @Override 
    public Recipe getRecipeByMaterial(int materialId) { 
     return null; 
    } 

    @Override 
    public Recipe getRecipeById(int id) { 
     return null; 
    } 

    @Override 
    public void addRecipe(Recipe recipe) { 

    } 

    @Override 
    public void updateRecipe(Recipe recipe) { 

    } 

    @Override 
    public void deleteRecipe(int id) { 

    } 
} 
+1

JPQLが無効です。 "SELECT {エイリアス}"で始める必要があり、FIELD以外のものでは注文できません。つまり、 'SELECT r FROM Recipe r ORDER BY recipeId' – DN1

+0

HQLを使用したのは同じクエリだと思います。 –

+0

jpa apiを使用している場合、jpqlを使用しており、その構文は仕様で定義されています。自己責任で無視してください – DN1

答えて

0

最後に私は解決策を見つける。ロンボクの注釈とJPAは正しく機能しません。 JPAはロンボクとリスト<を得ることができません。

関連する問題