2012-05-28 48 views
1

我对Java ee和持久性技术颇有新意。 我想写一个动态查询。细节:
有一个数据表( '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。在数据表中,ids意味着用户和类型栏意味着用户的“活动”。如果某个用户有活动,我想要退回所有类型的活动。 – JREYR

+0

但你有一个datatable Newsactivities? –

+0

是的,数据表的名称为newsactivites。 – 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对象