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) {
}
}
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
Nun, ich habe HQL verwendet ich denke, es ist dieselbe Abfrage. –
Wenn Sie den jpa api verwenden, verwenden Sie jpql, und seine Syntax ist in einer Spezifikation definiert. Ignoriere es auf eigene Gefahr – DN1