2012-02-25 67 views
0

查询我的JPA的数据库(使用NetBeans,GlassFish的)用下面的查询工作:JPA - 不是查询成员查找bigint而不是日期?

//assume java.sql.Date d 
Query q = em.createQuery("select b from Band b where :date MEMBER OF b.dates"); 
q.setParameter("date", d); 
List bands = q.getResultList(); 

然而,当我改变了成员的不是会员,我得到以下服务器错误:

java.sql.SQLDataException: An attempt was made to get a data value of type 'DATE' from a data value of type 'BIGINT'. 
Error Code: 20000 
Call: SELECT t0.ID, t0.DTYPE, t0.EMAIL, t0.NAME, t0.PASSWORD, t0.BIOGRAPHY, t0.PHONENUMBER FROM SUPERUSER t0 WHERE (NOT EXISTS (SELECT DISTINCT t2.ID FROM SUPERUSER t2, Band_DATES t1 WHERE ((((t1.Band_ID = t0.ID) AND (? = t2.ID)) AND (t2.DTYPE = ?)) AND (t2.DTYPE = ?))) AND (t0.DTYPE = ?)) 
bind => [4 parameters bound] 

任何帮助,将不胜感激。我正在使用sql.Date。

编辑:包括我带实体

@Entity 
@Table(name = "BAND") 
public class Band extends SuperUser{ 
@Column(name="PHONENUMBER") 
private String phoneNumber; 
@Column(name="BIOGRAPHY") 
private String biography; 

@Column(name="DATES", columnDefinition = "DATE DEFAULT CURRENT_DATE") 
@ElementCollection 
private List<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 List getDates() 
{ 
    return dates; 
} 

} 

怎样才能获取表的说明?

+0

请张贴您的实体和表的描述。 – beerbajay 2012-02-26 00:25:01

+0

实体发布,我不知道如何获得netbeans中的表格描述。 – Aido 2012-02-26 12:33:07

+0

您如何期待从单列中获得'List '?我假设日期存储在另一个数据库表中,在这种情况下,您需要'@ CollectionTable' – beerbajay 2012-02-26 13:10:21

回答

0

该SQL看起来不正确,这很可能是使用MEMBER OF的问题。您可能想尝试JPA提供程序的最新版本或记录错误,但我不确定ElementCollection是否允许使用MEMBER OF语法。

MEMBER OF是一个旧的JPQL(来自EJBQL)语法,现在通常使用JPQL中的JOIN更好。

尝试,

select b from Band b join b.dates d where d = :date 
0

你应该注释你的dates @ElementCollection与@Temporal注解。另外,当使用@ElementCollection时,如果你想指定列的名字,我不认为你可以使用@Column而是@CollectionTable。只是这应该工作,虽然:

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