Joincolumn返回null值

时间:2016-10-28 09:14:36

标签: java spring jpa spring-boot joincolumn

我正在尝试使用@JoinColumn注释加入一个列,但我的列总是返回null,我不知道为什么。

@Entity
public class Blender implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "blender_id")
private int id;

@OneToMany(cascade = CascadeType.ALL, mappedBy = "blender", fetch = FetchType.EAGER)
private List<Ingredients> ingredients;

private Status status;
private String type;


public Blender() {
}

public Blender(List<Ingredients> ingredients) {
    this.ingredients = ingredients;
}

public List<Ingredients> getIngredients() {
    return ingredients;
}

public void setIngredients(List<Ingredients> ingredients) {
    this.ingredients = ingredients;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public Status getStatus() {
    return status;
}

public void setStatus(Status status) {
    this.status = status;
}

public int getId() {
    return id;
}


@Override
public String toString() {
    String result = String.format(
            "Blender[id=%d, type=%s, status=%s]%n",id,type,status);

    if(ingredients!=null){
        for (Ingredients ingredient: ingredients) {
            result += String.format(
                    "ingredients[id=%d,fruit=%s,juice=%s,ice=%s]%n",
                    ingredient.getId(),
                    ingredient.getFruit(),
                    ingredient.getJuice(),
                    ingredient.getIce());
        }
    }

   return result;
 }
}

和成分

@Entity
public class Ingredients implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

private int fruit;
private int juice;
private int ice;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(columnDefinition="integer", name = "blender_id")
private Blender blender;

public Ingredients() {
}

public Long getId() {
    return id;
}

public int getFruit() {
    return fruit;
}

public void setFruit(int fruit) {
    this.fruit = fruit;
}

public int getJuice() {
    return juice;
}

public void setJuice(int juice) {
    this.juice = juice;
}

public int getIce() {
    return ice;
}

public void setIce(int ice) {
    this.ice = ice;
}

public Blender getBlender() {
    return blender;
}

public void setBlender(Blender blender) {
    this.blender = blender;
}

@Override
public String toString() {
    return "Ingredients{" +
            "id=" + id +
            ", fruit='" + fruit + '\'' +
            ", juice='" + juice + '\'' +
            ", ice='" + ice + '\'' +
            '}';
}
}

@JoinColumn(columnDefinition="integer", name = "blender_id")返回null,不知道为什么。

2 个答案:

答案 0 :(得分:1)

尝试使用

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "blender_id")
private Blender blender;

答案 1 :(得分:0)

@OneToMany(mappedBy = "association", cascade = { CascadeType.ALL })
private List<Company> company;

@ManyToOne
@JoinColumn(name = "association_id")
private Association association;

你可以尝试这种模式。

为你读。

  

如何在Hibernate中启用延迟加载   在进一步移动之前,重要的是在使用hibernate映射与注释的情况下重新考虑延迟加载的默认行为。   默认行为是“热切地”加载“属性值”并加载“lazily集合”。与您可能记得的相反,如果您之前使用过普通的Hibernate 2(映射文件),默认情况下会急切地加载所有引用(包括集合)。另请注意,@ OneToMany和@ManyToMany关联默认为LAZY加载;和@OneToOne和@ManyToOne默认为EAGER加载。重要的是要记住以后避免任何陷阱。   要显式启用延迟加载,必须在要使用hibernate注释时延迟加载的关联上使用“fetch = FetchType.LAZY”。   示例用法如下所示:   @OneToMany(mappedBy =“category”,fetch = FetchType.LAZY)私人套装产品;与“FetchType.LAZY”并行的另一个属性是“FetchType.EAGER”,它与LAZY正好相反,即它还将在第一次获取所有者实体时加载关联实体。   懒惰加载如何在Hibernate中工作   Hibernate可以在您的实体和关联上应用延迟加载行为的最简单方法是提供它们的代理实现。 Hibernate通过用代理替换从实体类派生的代理来拦截对实体的调用。如果缺少所请求的信息,则在将控制权交给父实体的实施之前,将从数据库加载该信息。   请注意,当关联表示为集合类时,将创建包装器(本质上是集合的代理,而不是其包含的实体)并替换原始集合。当您访问此集合代理时,您在返回的代理集合中获得的内容不是代理实体;相反,它们是实体。你不需要在理解这个概念上施加太多压力,因为在运行时它几乎不重要。