EJB JPA QL。需要查询才能通过Collection对象中的元素从DB获取数据

时间:2013-03-30 19:23:38

标签: select jpa ejb-3.0

我面临的问题让我陷入困境。 我有课文章:

    @Entity
    @Table(name = "Articles")
    public class Article implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="article_id")
    private Long id;

    @Column(name="a_name")
    private String name;

    @Column(name="a_content")
    private String content;

    @OneToMany
    @Column(name="a_tag")
    private Collection <Tags> tag;



  @Entity
  @Table(name = "Tags")
  public class Tags implements Serializable {
  private static final long serialVersionUID = 1L;
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name="tag_id")
  private Long tag_id;

  @Column(name="tag_name",nullable=false)
  private String tag_name;

  @Column(name="tag_descr")
  private String tag_descr;

  //position 0 - supertag
  //position 1 - subsupertag
  //position 2 - subtags
  //Collection limited to 3 elements.(3 tags at most, necessaryly Super,subsuper,subtag
  @Column(name="super_tags")
  @OneToMany
  private Collection<Tags> supertags = new ArrayList<Tags>(3);

  //0-supertag 1-subsupertag 2- subtags
  @Column(name="tag_type")
  private int tag_type;

我的标记系统是我有Supertag,subsuprttag和subtag。 Supertag是subsupertag和subtag的父级,subsupertag是subtag的父级。 每篇文章都有super,subsuper和sub标签。

现在,我想只从数据库中获取具有特定标记的文章,但不知道如何引用,例如,集合标记中的元素2(按名称或位置),(这将是子标记) 。

final String q = "SELECT f FROM Article f WHERE f.a_tag= ..I m lost here ...
EntityManager em;
em.createQuery(q).getResultList();

我希望我的问题足够明确。我尽了最大的努力))谢谢你。

1 个答案:

答案 0 :(得分:0)

您可以加入标签以在JPQL中访问它们,

见, http://en.wikibooks.org/wiki/Java_Persistence/JPQL#JOIN

对于Tag的类型,如何将类型存储在数据库中?