jpa Использование предложения WHERE - PullRequest
0 голосов
/ 11 февраля 2011

У меня есть 2 объекта:

@Entity
public class Elements implements Serializable {

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Long id;

   private Owner owner;

}

@Entity
public class Owner implements Serializable {

   @Id
   @GeneratedValue(strategy = GenerationType.AUTO)
   private Long id;

   @OneToMany(fetch=FetchType.LAZY)
   List<Elements> elements;
}

Предположим, я хочу получить все элементы, принадлежащие владельцу, из таблицы элементов, и поэтому я использую:

TypedQuery query=em.createQuery("SELECT elem FROM Elements elem WHERE 
                       elem.owner:=elemOwner", Elements.class);

query.setParameter("elemOwner", ownerObjectFetchFromDataBase);

List<TrendUsers> userList=query.getResultList();

Но я получаю следующую ошибку: Сравнения между BLOB и BLOB не поддерживаются. Типы должны быть сопоставимы. Типы строк также должны иметь сопоставления. Если сопоставление не совпадает, возможное решение состоит в том, чтобы привести операнды, чтобы заставить их к сопоставлению по умолчанию ...

Есть ли способ выбрать из таблицы элементов и в предложении WHERE использовать объект (а не только String, int ...)?

(p.s Я также попробовал запрос ниже, и он не работал: TypedQuery query = em.createQuery ("ВЫБРАТЬ элемент из элементов элемента ГДЕ elem.owner.id:=elemOwner", Elements.class); query.setParameter ("elemOwner", ownerObjectFetchFromDataBase.id); List userList = query.getResultList (); )

Спасибо

1 Ответ

3 голосов
/ 11 февраля 2011

Вам нужно пометить Владельца также ManyToOne .

@Entity public class Elements implements Serializable {
   ...snip ...
   @ManyToOne(fetch=FetchType.LAZY)
   @JoinColumn(name="OWNER_ID")
   private Owner owner;
}

@Entity public class Owner implements Serializable {
   .. snip ...
   @OneToMany(fetch=FetchType.LAZY, mappedBy="owner")
   List<Elements> elements;
}

Сейчас вы пытаетесь сохранить сериализованного владельца в Blob. Это не то, что вы хотите; -)

наслаждаться

Редактировать: исправлено xatavt

...