首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA + Hibernate将一个实体中的java.util.Set映射到另一个实体java.util.Map

JPA + Hibernate将一个实体中的java.util.Set映射到另一个实体java.util.Map
EN

Stack Overflow用户
提问于 2017-10-29 01:33:34
回答 1查看 366关注 0票数 0

我在项目中遇到了JPA + Hibernate映射的问题(我完全是hibernate和jpa的新手,所以请耐心等待:)。

以下是我的实体:

代码语言:javascript
复制
@Entity
@Table(name = "yeasts")
public class Yeast {

...
private Set<BeerRecipe> recipes;
...

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "recipe_yeasts"
        ,joinColumns = @JoinColumn(name = "yst_id", referencedColumnName = "yst_id")
        ,inverseJoinColumns = @JoinColumn(name = "brp_id", referencedColumnName = "brp_id"))
public Set<BeerRecipe> getRecipes() {
    return recipes;
}

public void setRecipes(Set<BeerRecipe> recipes) {
    this.recipes = recipes;
}
}

第二个是:

代码语言:javascript
复制
@Entity
@Table(name = "beer_recipes")
public class BeerRecipe {

...
private Map<Yeast,Double> yeasts;
...
@ManyToMany(cascade = CascadeType.ALL)
@ElementCollection
@JoinTable(name = "recipe_yeasts"
        ,inverseJoinColumns = @JoinColumn(name = "yst_id", referencedColumnName = "yst_id")
        ,joinColumns = @JoinColumn(name = "brp_id", referencedColumnName = "brp_id"))
public Map<Yeast, Double> getYeasts() {
    return yeasts;
}

public void setYeasts(Map<Yeast, Double> yeasts) {
    this.yeasts = yeasts;
}

...
}

我被困在这里,因为我找不到解决我的问题的办法。我需要我的BeerRecipe对象来存储Map<酵母,Double> (double代表啤酒配方中使用的酵母量),以及酵母对象来存储Set< BeerRecipe>(多对多关系-使用相同酵母的X啤酒配方和在同一配方中使用的X酵母)

现在我得到了一个异常:

代码语言:javascript
复制
Use of @OneToMany or @ManyToMany targeting an unmapped class: 
my.project.db_model.BeerRecipe.yeasts[java.lang.Double]
EN

回答 1

Stack Overflow用户

发布于 2017-10-29 05:22:01

示例解决方案:

代码语言:javascript
复制
@Entity
@Table(name = "yeasts")
public class Yeast {

    @Id
    private int yst_id;

    @OneToMany(cascade=CascadeType.ALL, mappedBy="yeasts")
    private Set<BeerRecipe> recipes;

    ...
}

代码语言:javascript
复制
@Entity
@Table(name = "beer_recipes")
public class BeerRecipe {

    @Id
    private int brd_id;

    @ElementCollection
    @CollectionTable(name = "recipe_yeasts", joinColumns = @JoinColumn(name = "brd_id"))
    @MapKeyJoinColumn(name = "yst_id", referencedColumnName = "yst_id") //refers to Yeast
    @Column(name = "amount") //refers to Double
    private Map<Yeast, Double> yeasts;

    ...
}

通过这种方法,您可以保留beer_recipes和酵母之间的双向关系。该映射代表中间的recipe_yeasts连接表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46992570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档