【问题标题】:JPA - not member of query looks for bigint instead of date?JPA - 不是查询成员查找 bigint 而不是日期?
【发布时间】:2012-02-25 22:44:28
【问题描述】:

使用以下查询来查询我的 jpa 数据库(使用 netbeans、glassfish):

//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();

但是,当我将 MEMBER OF 更改为 NOT MEMBER OF 时,我收到以下服务器错误:

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;
}

}

如何获得表格描述?

【问题讨论】:

  • 请发布您的实体和表格描述。
  • 实体已发布,我不知道如何在 netbeans 中获取表描述。
  • 您希望如何从单个列中获得List&lt;Date&gt;?我假设日期存储在另一个数据库表中,在这种情况下你需要@CollectionTable
  • 您能详细说明一下吗?我想我可以将包含日期的列表保存在一列中。
  • "ElementCollection 值始终存储在单独的表中。"来自:the wikibooks article

标签: java database jpa netbeans


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您应该使用@Temporal 注释来注释您的dates @ElementCollection。同样,在使用@ElementCollection 时,如果您想指定列的名称,我认为您不能使用@Column,而是使用@CollectionTable。但这应该可以工作:

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

    【讨论】:

      猜你喜欢
      • 2017-09-04
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 2018-03-27
      • 2021-10-23
      • 1970-01-01
      • 2016-02-02
      相关资源
      最近更新 更多