2012-02-24 14 views
1

我正在jpa项目中工作,我坚持包含Date对象ArrayList的Band对象的多个实例。查询jpa数据库时是否可以使用类似这样的方法?

我想查询数据库以获取Bands,其中ArrayLists包含指定的日期。

这可能吗?我知道我的整个设计可能不好,但我希望这是可能的,因为我知道你需要一个get方法来使用对象参数,所以方法必须在某处调用。

我想沿着这些线路使用的东西:

Date d = new Date(); 
    List bands = em.createQuery("select b from Band b where b.dates.contains(d)").getResultList(); 
    //I am aware I may need to set up d as an argument. 

这是因为请求的时间带实体。假设包和导入是正确的。

@Entity 
@Table(name = "BAND") 
public class Band extends SuperUser { 
    @Column(name = "PHONENUMBER") 
    private String phoneNumber; 
    @Column(name = "BIOGRAPHY") 
    private String biography; 
    @Column(name = "DATES") 
    private ArrayList<Date> dates = new<Date> ArrayList(); 

    public Band() { 
    } 

    public Band(String n, String e, String p, String ph_no, String bio) { 
     super(n, e, p); 
     this.phoneNumber = ph_no; 
     this.biography = bio; 
    } 

    public void setPhoneNumber(String p) { 
     this.phoneNumber = p; 
    } 

    public String getPhoneNumber() { 
     return this.phoneNumber; 
    } 

    public void setBoigraphy(String b) { 
     this.biography = b; 
    } 

    public String getBiography() { 
     return this.biography; 
    } 

    public void setDate(Date d) { 
     dates.add(d); 
    } 

    public void cancelDate(Date d) { 
     while (dates.remove(d)) { 
     } 
    } 

    public ArrayList getDates() { 
     return dates; 
    } 

} 

编辑:我知道它的工作。我不知道元素集合和时间类型,将日期列表更改为:

@ElementCollection 
@Temporal(TemporalType.DATE) 
private List<Date> dates = new <Date>ArrayList(); 

修复它。

回答

2

我想你要找的是什么“成员”:http://www.objectdb.com/java/jpa/query/jpql/collection#NOT_MEMBER_OF_

select b from Band b where :d member of b.dates 
+0

啊哈有希望呢!我得到一个错误,没有要求答案,我很想知道它是什么意思:编译查询时出错[从b中选择b,其中:d成员b.dates],第1行,第42列:无效集合成员声明[日期],预期集合值关联字段。 – Aido 2012-02-24 17:25:57

+0

发布乐队实体代码... – 2012-02-24 17:33:46

+0

原创帖子编辑。 – Aido 2012-02-25 16:44:03

相关问题