2014-12-15 2 views
1

я определяю следующие объекты: BaseEntity, magasin и article:Получение данных с помощью HSQL - отношение многих к одному

@Entity(name = "magasin") 
@Table(name = "magasin") 
public class Magasin extends BaseEntity { 

    private static final long serialVersionUID = 1L; 


    @Basic 
    @Size(min=5, max=100, message="The name must be between {min} and {max} characters") 
    private String name; 

    @OneToMany(cascade=CascadeType.ALL, mappedBy="magasin") 
    @Valid 
    private Set<Article> article; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Set<Article> getArticle() { 
     return article; 
    } 

    public void setArticle(Set<Article> article) { 
     this.article = article; 
    } 
} 

@Entity(name="article") 
@Table(name="article") 
public class Article extends BaseEntity { 

    private static final long serialVersionUID = 1L; 

    @ManyToOne 
    private Magasin magasin; 

    @Basic 
    @Size(min=5, max=100, message="The name must be between {min} and {max} characters") 
    private String name; 
    @Basic 
    private float price; 

    public Magasin getMagasin() { 
     return magasin; 
    } 

    public void setMagasin(Magasin magasin) { 
     this.magasin = magasin; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String nom) { 
     this.name = nom; 
    } 
    public float getPrice() { 
     return price; 
    } 

    public void setPrice(float price) { 
     this.price = price; 
    } 

} 

@MappedSuperclass 
public class BaseEntity { 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
private Integer id; 

public void setId(Integer id) { 
    this.id = id; 
} 

public Integer getId() { 
    return id; 
} 

public boolean isNew() { 
    return (this.id == null); 
} 

}

Как создать запрос HQL для того, чтобы получить все Article для magasin выбран?

Я стараюсь это

@Override 
public List<Article> findArticle(Magasin magasin) { 
    String query = "From Article m where m.magasin.id = "+magasin.getId(); 
    System.out.print(query); 
    Session session = getSessionFactory().getCurrentSession(); 
    if((session.createQuery(query).list()!=null) && (session.createQuery(query).list().size()!=0)) 
     return (List<Article>) session.createQuery(query).list(); 
    else 
     return null; 
    } 

Но это ничего не возвращает, всегда нуль .Как я могу решить это?

+0

Может ли вы показать мне свой класс 'BaseEntity'? –

+0

@ Андре Я редактирую свой вопрос – user204

ответ

0

Я не знаю тип вашего идентификатора magasin, поэтому приспосабливаем приведенный ниже код.

Сначала получите экземпляр Magasin для ID:

Magasin mag = (Magasin)session.get(Magasin.class, id); 

Далее вы можете получить доступ к статьям для Magasin Мэга через аксессор

Set<Article> articles = mag.getArticle(); 
0

Попробуйте следующее: «Выберите * Из статьи, Mgasin, где Article.mgasin.id =" + magasin.getId();

Смежные вопросы