2012-05-28 5 views
1

Я совершенно новый с технологией java ee и persistance. Я пытаюсь написать динамический запрос. Подробности:
Там находится таблица данных ('newsactivites'), это выглядит следующим образом:java ee - динамический запрос устойчивости

id type 
4 UploadVideo 
4 CreateBlog 
1 UploadPicture 
10 UploadVideo 
10 CreateBlog 

И, кроме того, есть перечисление:

public enum Type { 
     UploadVideo("show.uploadedVideo"), 
     UploadPicture("show.uploadedPicture"), 
     CreateBlog("show.createdBlog"); 
} 

Так что я хотел бы написать способ, как это:

private List<Type> activities=new ArrayList<Type>(); 

@CollectionElements() 
@Column(name="type") 
@Enumerated(EnumType.STRING) 
@JoinTable(name = "newsactivities", joinColumns = { @JoinColumn(name = "id") }) 
public List<Type> getActivities() { 
     return activities; 
} 

Но я хочу вернуть только один деятельность идентификаторов в данный момент:

public List<Type> getActivities(int id) { } 

Любая помощь была бы принята с благодарностью!

ответ

0

Если я правильно прочитал вашу модель (я не уверен), у вас должен быть класс сущности Newsactivities (в классе Newsactivities.class) с внешним ключом type. Тогда вам потребуется List<Newsactivities> (а не List<Types>):

public List<Type> getActivities(int id) { 
    TypedQuery<Newsactivities> tq = em.createQuery(
     "SELECT n FROM Newsactivities n WHERE n.type=:type, Newsactivities.class); 
    tq.setParameter("type", id); 
    return(tq.getResultList()); 
} 
+0

Нет, у меня нет класса объектов Newsactivites. В таблице данных идентификаторы означают пользователей, а столбец типа означает «активность» пользователя. Если есть действия данного пользователя, я хочу вернуть все виды деятельности. – JREYR

+0

Но у вас есть данные о новостях? –

+0

Да, имя файла dataativites. – JREYR

0

Вы ассоциированным с Type объекта, как вы пишете:

public class A{ 

private List<Type> activities=new ArrayList<Type>(); 

@CollectionElements() 
@Column(name="type") 
@Enumerated(EnumType.STRING) 
@JoinTable(name = "newsactivities", joinColumns = { @JoinColumn(name = "id") }) 
public List<Type> getActivities() { 
    return activities; 
} 
} 

тогда вам нужен Repository, как это:

public interface ARepository extends JpaRepository<A,Long>{ 
@Query("select a.activities from A a where a.id=?1") 
List<Type> findTypeById(Long id); 
} 

теперь вы можете использовать findTypeById, Это требует, чтобы у вас есть A объект