2017-12-07 23 views
1

Ich bin neu mit Hibernate und Jpa. Ich brauche ein wenig Hilfe. Ich entwickle eine erholsame Service-Anwendung mit Spring-Boot. Verwenden von MySQL und Hibernate.Warum die Mapping-Liste leer ist?

Wenn ich mein Service "Zutaten" Array aufrufen wird so leer sein.

In der Datenbank Zutat Tabelle und Rezept Tabelle hat eine zu viele Beziehung, so habe ich versucht, die gleiche Sache mit JPA, aber ich kann nicht den richtigen Weg zu finden. Wenn ich versuche, Rezept zu bekommen, kann ich zugreifen, aber die Zutatenliste ist immer leer.

Meine Datenbank-Design: DB Design

Rezept Entity:

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<>(); 


} 

Ingredient 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

Ihr JPQL ist ungültig. Sollte mit "SELECT {alias}" beginnen und Sie können nicht durch etwas bestellen, das kein FELD ist ... d. H. Könnte 'SELECT r FROM Rezept r ORDER BY rezeptId' sein – DN1

+0

Nun, ich habe HQL verwendet ich denke, es ist dieselbe Abfrage. –

+0

Wenn Sie den jpa api verwenden, verwenden Sie jpql, und seine Syntax ist in einer Spezifikation definiert. Ignoriere es auf eigene Gefahr – DN1

Antwort

0

Endlich finde ich eine Lösung. Lombok Annotation und JPA funktioniert nicht richtig. JPA kann die Liste <> nicht mit Lombok erhalten.