1

我对 java ee 和持久性技术很陌生。我正在尝试编写一个动态查询。细节:
有一个数据表(' newsactivites '),它看起来像这样:

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

但我想在给定时间只回馈一个 id 的活动:

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

任何帮助将不胜感激!

4

2 回答 2

0

如果我正确阅读了您的模型(我不确定),您应该有一个带有外键的实体类Newsactivities(在一个类中) 。然后你需要一个(而不是一个):Newsactivities.classtypeList<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());
}
于 2012-05-28T19:34:34.683 回答
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对象

于 2016-09-26T05:19:08.063 回答