JPA - не член запроса ищет bigint вместо даты? - PullRequest
0 голосов
/ 26 февраля 2012

Запрос к моей базе данных 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;
}

}

Как получить описание таблицы?

Ответы [ 2 ]

0 голосов
/ 27 февраля 2012

Вы должны аннотировать dates @ElementCollection аннотацией @Temporal.Кроме того, при использовании @ElementCollection я не думаю, что вы можете использовать @Column, а @CollectionTable, если вы хотите указать имена столбцов.Просто это должно работать, хотя:

@ElementCollection 
@Temporal(TemporalType.DATE)
private List<Date> dates = new <Date>ArrayList();
0 голосов
/ 27 февраля 2012

SQL выглядит некорректно, скорее всего, это проблема использования MEMBER OF. Возможно, вы захотите попробовать последнюю версию вашего поставщика JPA или зарегистрировать ошибку, хотя я не уверен, разрешен ли синтаксис MEMBER OF для ElementCollection.

MEMBER OF - это старый синтаксис JPQL (из EJBQL), обычно лучше использовать JOIN в JPQL сейчас.

Попробуйте,

select b from Band b join b.dates d where d = :date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...