2016-10-28 2 views
1

Я пытаюсь присоединиться к столбцу, используя аннотацию @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") возвращается нуль не знаю, почему.

+0

Что это значит? Аннотации JoinColumn ничего не возвращают. Он просто отмечает поле как имеющее столбец объединения в другую таблицу. Поставщик JPA выдаст SQL, на который вы можете посмотреть. Возможно, когда вы найдете свой ответ ... –

+0

@NeilStockton Ну не '@ JoinColumn' создать внешний ключ в ссылочной таблице? –

+0

«Он просто отмечает поле как имеющее столбец соединения к другой таблице». Если вы скажете «он получен как нуль», пожалуйста, по крайней мере, ПОСЛЕ ВАШЕГО КОДА, чтобы получить объект (ы) и отметьте в транзакции и где вы говорите, что это нуль в этом коде. Это дает основание для комментариев. Некоторый код преобразования без SQL/DDL не –

ответ

1

попробовать только с

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

, что не работает.Все еще получаю null ВЫБЕРИТЕ * ИЗ ИНГРЕДИЕНТОВ; ID \t \t ФРУКТОВЫЙ ЛЕД \t \t СОК BLENDER_ID нуль –

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

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

Вы можете попробовать этот шаблон.


Читайте за вас.

Как включить отложенную загрузку в Hibernate Прежде чем двигаться дальше, важно, чтобы резюмировать поведение по умолчанию отложенной загрузки в случае использования Hibernate отображения против аннотаций. Поведение по умолчанию заключается в том, чтобы загружать «значения свойств с нетерпением» и загружать «коллекции лениво». Вопреки тому, что вы могли бы вспомнить, если раньше вы использовали простой Hibernate 2 (файлы сопоставления), где все ссылки (включая коллекции) загружаются по умолчанию. Также обратите внимание, что ассоциации @OneToMany и @ManyToMany дефолтны для загрузки LAZY; и @OneToOne и @ManyToOne по умолчанию загружаются EAGER. Это важно помнить, чтобы избежать любых ошибок в будущем. Чтобы включить ленивую загрузку явно, вы должны использовать «fetch = FetchType.LAZY» в ассоциации, которую вы хотите ленить, когда вы используете аннотации спящего режима. Пример использования будет выглядеть так: @OneToMany (mappedBy = "category", fetch = FetchType.LAZY) private Set products; Другим атрибутом, параллельным «FetchType.LAZY», является «FetchType.EAGER», который просто противоположный LAZY, т. Е. Он будет загружать объект объединения, а также, когда сам объект владельца выбирается впервые. Как ленивая загрузка работает в спящем режиме Самый простой способ, с помощью которого Hibernate может применять ленивое поведение нагрузки для ваших сущностей и ассоциаций, является предоставление им прокси-функции. Hibernate перехватывает вызовы сущности путем подстановки прокси-сервера для него, полученного из класса сущности. Если запрашиваемая информация отсутствует, она будет загружена из базы данных до того, как управление будет передано в реализацию родительского объекта. Обратите внимание, что когда ассоциация представляется в виде класса коллекции, тогда создается оболочка (по существу, прокси для коллекции, а не для сущностей, которые она содержит) и заменяется исходной коллекцией. Когда вы получаете доступ к этому прокси-серверу, то то, что вы получаете внутри возвращенной коллекции прокси, не является прокси-объектами; скорее они являются реальными сущностями. Вам не нужно оказывать сильное давление на понимание этой концепции, потому что во время выполнения это не имеет большого значения.

+0

, что не работает, либо по-прежнему возвращаются нуль на 'blender_id' в' ингредиентам table' Я не уверен, что я здесь делаю неправильно , –

+0

Вы подтверждаете свой код. уже вы принимаете решение. – Byeon0gam

+0

полное объединениеColumn. после того, как вы подробно увидите свой код. – Byeon0gam