我刚开始使用Springboot和Accessingdatajpa,我决定看看https://spring.io.我决定看的指南是访问数据jpa。我一直跟踪到最后,然后运行了我的应用程序。出乎意料的是,我收到了一条错误消息。
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property name found for type User!
at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:77)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:329)
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:309)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:272)
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:243)
at org.springframework.data.repository.query.parser.Part.<init>(Part.java:76)
所以问题似乎很简单。它正在我的用户类中查找属性“名称”。但我实际上并没有在任何地方使用属性“名称”。
我的存储库界面:
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String userName);
}
我的用户类:
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long userID;
private LocalDateTime joinDate;
private String userName;
private String email;
protected User(){}
public User(String userName){
this.userName = userName;
}
@Override
public String toString() {
return String.format("User[id=%d, userName=%s, email= %s]",userID, userName,email);
}
}
应用类:
@SpringBootApplication
public class Application {
private static final Logger log = LoggerFactory.getLogger(Application.class);
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
@Bean
public CommandLineRunner demo(UserRepository repository){
return (args) -> {
//Save a few Users
repository.save(new User("Niek"));
repository.save(new User("Costas"));
repository.save(new User("Eric"));
repository.save(new User("Philip"));
repository.save(new User("Barry"));
//Fetch all Users
log.info("Users Found With findAll()");
log.info("--------------------------");
for(User user: repository.findAll()){
log.info(user.toString());
}
log.info("");
//Fetch one User
log.info("User found With findOne(1L)");
log.info("--------------------------");
log.info(repository.findOne(1L).toString());
//Fetch one User By Name
log.info("User found with findByName(\"Niek\")");
log.info("--------------------------");
for(User user: repository.findByName("Niek")){
log.info(user.toString());
}
};
}
}
我假设你们中的一些人在想,你没有实现你的存储库。
在一个典型的Java应用程序中,您会期望编写一个实现自定义存储库的类。但这就是Spring Data JPA如此强大的原因:您不必编写存储库接口的实现。Spring Data JPA在您运行应用程序时动态创建一个实现。
这就引出了我的问题:
您忘记了注释< code>User POJO类中的所有字段。为此,您必须用< code>@Column注释对所有字段进行注释,除了第一个字段(在这种情况下,它必须用@Id进行注释)。你还必须确保,你有所有指定字段的所有getter/setter。
我创建了一个maven项目,并添加了我需要的所有依赖项。我有一些使用spall-data-jpa的存储库,我添加了一些集成测试。 现在,如果我知道它是基于springmvc的,我需要添加spring data rest的ontop。但是我发现的所有例子,我需要添加spring boot来启动应用程序。我还注意到所有新的spring项目都使用spring boot。这意味着我必须学习并在我的项目中使
我已经向jpa存储库添加了一个自定义方法,如http://docs.spring.io/spring-data/data-jpa/docs/1.0.x/reference/html/#repositories.custom-实施情况 就我所见,当我使用spring数据rest时,这个方法并没有公开。是否有任何方法可以将其发布为spring data REST生成的REST API的一部分(无需自己
我以前从未将Spring Data JPA与存储过程一起使用过,但我非常感谢这里的任何反馈/输入
我在玩spring数据存储库,有一个关于编写CRUD测试的问题。我针对Hibernate DAO和EJB3实体bean编写了许多CRUD测试,在这些测试中,我创建和实体,将其刷新到数据库中,清除实体管理器,并按ID读回它。实体管理器被清除,因此第一级缓存不会在读取时被击中。 使用spring数据存储库,我找不到一种方法来清除测试使用的底层实体管理器,这样我的读取就不会返回到实际的数据库,使我的测试
我在一个spring webmvc项目上使用spring-data-jpa。我在使用我的一个实体的存储库创建查询时遇到了一个问题。下面您可以看到我的实体、我的存储库和异常。 我的实体: 我的存储库: 而例外, 最后,我将重命名为(删除下划线),并重命名getters/setters和存储库(),问题得到解决。 我的问题是为什么会发生这种情况?
现在,当我启动Spring Data JPA时,我的印象是Spring Data JPA是JPA规范的独立实现。原来我错了。 如果我理解正确的话,Spring Data JPA是Spring提供的一个抽象层,它在内部使用其他JPA提供者(例如Hibernate),所以通常如下所示: