嘿,我想创建一个扩展JpaRepository的存储库并获取结果而无需编写实际查询,在我的示例中,我有2个表Book和Author,它们之间存在多对多关系,假设我想按特定的author_id来获取图书清单,因为在我图书实体,我没有任何名为author_id的字段,因此我将如何使用JPARepository来获取结果而无需编写实际查询。我正在做这样的事情:我创建了一个BookDTO,其中包含Book和Author的对象,并且我创建了bookDTORepository来扩展JpaRepository并正在调用List<Book> findByAuthor_Id(Integer id);
,但是它的抛出错误为:Not an managed type: class golive.data.bookdto
我的书类是
package golive.data;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.sun.istack.internal.NotNull;
@Entity
@Table(name="book")
public class Book implements java.io.Serializable{
@Id
@GeneratedValue
private Integer id;
@NotNull
@Column(name="name")
private String name;
@ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
@JoinTable(name = "writes", joinColumns = { @JoinColumn(name = "book_id") }, inverseJoinColumns = { @JoinColumn(name = "author_id") })
private Set<Author> authors = new HashSet<Author>();
public Set<Author> getAuthors() {
return authors;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public void setAuthors(Set<Author> authors) {
this.authors = authors;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
我的作家班是
package golive.data;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.sun.istack.internal.NotNull;
@Entity
@Table(name="author")
public class Author implements java.io.Serializable{
@Id
@GeneratedValue
@Column(name="id")
private Integer Id;
@NotNull
@Column(name="name")
private String name;
public Integer getId() {
return Id;
}
public String getName() {
return name;
}
public void setId(Integer id) {
Id = id;
}
public void setName(String name) {
this.name = name;
}
}
我预定的课程是
package golive.data;
public class bookdto {
private Book book;
private Author author;
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public Author getAuthor() {
return author;
}
public void setAuthor(Author author) {
this.author = author;
}
}
我的bookDTORepository是:
package golive.data;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
public interface bookDTORepository extends JpaRepository<bookdto, Book> {
List<Book> findByAuthor_Id(Integer id);
}
我添加了书控制器方法:
@RequestMapping(value = "/listbyauthor", method = RequestMethod.POST, produces = "application/json")
public ResponseEntity<List<Book>> getBookByAuthorId(@RequestBody Author author,HttpServletResponse response) {
try {
Author temp = new Author();
temp.setId(author.getId());
temp.setName(author.getName());
return new ResponseEntity<>(bookRepository.findByAuthor(temp), HttpStatus.OK);
} catch (Exception e) {
e.printStackTrace();
}
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
您要查找特定作者的所有书籍,因此,在给定作者的情况下,检索其作者集中包含指定作者的所有书籍。
相关的JPQL运算符为:
http://www.objectdb.com/java/jpa/query/jpql/collection#NOT_MEMBER_OF_
[NOT] MEMBER [OF] [NOT] MEMBER OF运算符检查指定的持久性收集字段中是否包含指定的元素。
例如:
如果语言包含“英语”,则c.languages的“英语”成员为TRUE,否则为FALSE。如果语言不包含“英语”,则“英语”不属于c.languages。
您可能知道(也可能不知道),您正在使用Spring Data,它可以根据方法名称为您派生一些查询。但是,文档未提及对[NOT] MEMBER
[OF]运算符的支持:
http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-
methods.query-creation
因此,您需要向存储库中添加一个自定义查询方法,该方法将类似于:
public interface BookRepository extends JpaRepository<Book, Integer> {
@Query("select b from Book b where ?1 MEMBER OF b.authors")
List<Book> findByAuthor(Author author);
}
而 作为参数传递的Author是从数据库 (通过您的AuthorRepository) 检索的持久实例 。
我有一个使用Spring3.1的web应用程序。1.我们有一个使用JdbcTemplate的genericDao。数据源在GenericDaoImpl中是这样注入的。 这是一把简单的刀。 目前,凭借独特的数据源,它工作得非常完美。applicationContext配置了注释。 现在我必须集成一个新的DAO,仍然使用通用道,但在另一个数据库上工作(所以是另一个数据源)。 我在服务中使用@Trans
我正在测试一个基于酒店搜索的场景。所以我做了3个模型类,分别是酒店、房间和可用性 下面是我们正在使用的三个模型类。 Hotel.java @文档(集合="酒店")公共类酒店{ } Room.java @文件(收集=“房间”)公共教室{ } 可利用性Java语言 @文件(收集=“房间”)公共类可用性{ } 这些存储在两个mongodb集合中,一个用于酒店,另一个用于房间和可用性。 下面是我们从中提取
问题内容: 如何从中加载数据并返回Map接口。如何在内部维护查询数据。我尝试加载,但出现以下异常,即 org.springframework.dao.IncorrectResultSizeDataAccessException:错误的结果 码:- 请帮我 问题答案: 如果您想获得一行,则比较合适。您选择的是无子句,因此您可能想要。该错误可能表明需要一行,但您查询的却是很多行。 查看文档。 有一个只
我使用Spring引导,Spring数据JPA,我正在寻找解决方案,以获得给定表的所有列名。但没能按我的要求找到 不需要本机查询的解决方案。正在寻找使用spring数据抽象的通用解决方案。 我可以使用普通java获取列名,但我想使用spring数据JPA获取它们。
我正在创建一个fetchBill函数。分配https://randomapi.com/api/006b08a801d82d0c9824dcfdfdfa3b3c到一个api变量。它使用浏览器的fetch函数向api发出HTTP请求。它在一个函数中使用箭头函数。然后调用fetch函数,并在将其转换为JSON后返回响应。使用另一个。然后调用第一个函数,该函数将JSON数据传递给displayCartTo
我希望在JMETER中实现以下功能 JMeter加载带有id号的CSV文件 Jmeter中的每个用户/线程选择一个id号,并将其添加到他们的HTTP请求中,例如HTTP:www.testsite.com/test.php?id=x 重复步骤2,选择文件中的下一个id号。 这样,我就可以测试我的servlet是否使用连接池执行多个线程。 谢谢
问题内容: 因此,我有一个返回jSON对象的链接,我需要对其进行解码并将其放入PHP中的变量中。 网址 这是它返回的对象 我真的只对 最后是消息 那么,如何提取jSON对象并将其放入PHP中可以稍后使用的正确变量中? 变量,如:,,,,,等。 我只需要知道如何检索jSON对象,然后将数据提取到PHP中的变量中即可。 我现在可以获取PHP数组,但是在调用正确的值时遇到了一些麻烦。这是数组。 自从我们
问题内容: 我正在尝试创建一个用于在PHP上执行oracle sql语句的类。 这是我的index.php,我正在尝试调用我的函数 和我的dbcontrol.php用于我的功能 我不确定似乎有什么问题。但是每次我运行这个。页面上未显示任何内容。没有结果,没有数据。但是我确信数据库中有数据。 问题答案: 您总是得到空白页的原因是: oci_num_rows()函数不会返回您可能认为的所选行数。它返回