Java Jpa 查询搜索按 ID 相关的实体
Java Jpa Query searching an Entityes Related By Id
我有 2 个实体:作者和专辑。
作者是 OneToMany(mappedby="author")
相册是 ManyToOne
我正在尝试搜索传递了 idAuthor 的相册。
这里是代码:
public Collection<Album> findByIdAuthor(Long idAuthor, HttpServletRequest request) {
Collection<Album> album;
try {
album = em.createQuery("select a from Album a where a.author like :id").setParameter("id", idAuthor).getResultList();
} catch(Exception e) {
request.setAttribute("err", e.toString());
return null;
}
return album;
}
这里有作者实体
@Entity
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable=false)
private String name;
@Column
private int debut;
@Column(length=1000)
private String info;
@OneToMany(mappedBy="author")
private List<Track> tracks;
@OneToMany(mappedBy="author",cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH})
private List<Album> album;
public Author() {
super();
}
public Author(String name) {
super();
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getDebut() {
return debut;
}
public void setDebut(int debut) {
this.debut = debut;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public List<Track> getTracks() {
return tracks;
}
public void setTracks(List<Track> tracks) {
this.tracks = tracks;
}
public List<Album> getAlbum() {
return album;
}
public void setAlbum(List<Album> album) {
this.album = album;
}
@Override
public String toString() {
return "Autore [id=" + id + ", nome=" + name + ", dataDebutto="
+ debut + ", info=" + info + ", brani=" + tracks
+ ", album=" + album + "]";
}
}
但我收到此消息:org.apache.openjpa.persistence.ArgumentException:未找到类型 "class java.lang.Integer" 的元数据。 class没有增强。
为什么?
您正在尝试将整数值发送到对象
你说作者(对象)喜欢id(idAuthor Long)
改正如下尝试
public Collection<Album> findByIdAuthor(Long idAuthor, HttpServletRequest request) {
Collection<Album> album;
try {
album = em.createQuery("select a from Album a where a.author.id like :id").setParameter("id", idAuthor).getResultList();
} catch(Exception e) {
request.setAttribute("err", e.toString());
return null;
}
return album;
}
我有 2 个实体:作者和专辑。 作者是 OneToMany(mappedby="author") 相册是 ManyToOne
我正在尝试搜索传递了 idAuthor 的相册。
这里是代码:
public Collection<Album> findByIdAuthor(Long idAuthor, HttpServletRequest request) {
Collection<Album> album;
try {
album = em.createQuery("select a from Album a where a.author like :id").setParameter("id", idAuthor).getResultList();
} catch(Exception e) {
request.setAttribute("err", e.toString());
return null;
}
return album;
}
这里有作者实体
@Entity
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable=false)
private String name;
@Column
private int debut;
@Column(length=1000)
private String info;
@OneToMany(mappedBy="author")
private List<Track> tracks;
@OneToMany(mappedBy="author",cascade={CascadeType.PERSIST,CascadeType.MERGE,CascadeType.REFRESH})
private List<Album> album;
public Author() {
super();
}
public Author(String name) {
super();
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getDebut() {
return debut;
}
public void setDebut(int debut) {
this.debut = debut;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public List<Track> getTracks() {
return tracks;
}
public void setTracks(List<Track> tracks) {
this.tracks = tracks;
}
public List<Album> getAlbum() {
return album;
}
public void setAlbum(List<Album> album) {
this.album = album;
}
@Override
public String toString() {
return "Autore [id=" + id + ", nome=" + name + ", dataDebutto="
+ debut + ", info=" + info + ", brani=" + tracks
+ ", album=" + album + "]";
}
}
但我收到此消息:org.apache.openjpa.persistence.ArgumentException:未找到类型 "class java.lang.Integer" 的元数据。 class没有增强。
为什么?
您正在尝试将整数值发送到对象
你说作者(对象)喜欢id(idAuthor Long)
改正如下尝试
public Collection<Album> findByIdAuthor(Long idAuthor, HttpServletRequest request) {
Collection<Album> album;
try {
album = em.createQuery("select a from Album a where a.author.id like :id").setParameter("id", idAuthor).getResultList();
} catch(Exception e) {
request.setAttribute("err", e.toString());
return null;
}
return album;
}