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) {
}
}
JPQLが無効です。 "SELECT {エイリアス}"で始める必要があり、FIELD以外のものでは注文できません。つまり、 'SELECT r FROM Recipe r ORDER BY recipeId' – DN1
HQLを使用したのは同じクエリだと思います。 –
jpa apiを使用している場合、jpqlを使用しており、その構文は仕様で定義されています。自己責任で無視してください – DN1