spring data jpa getOne抛出LazyInitializationException而findBy没有
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring data jpa getOne抛出LazyInitializationException而findBy没有相关的知识,希望对你有一定的参考价值。
我使用spring数据jpa,这是我的样本:
public interface UserRepository extends JpaRepository<User, Long> {
User findByUserName(String userName);
....}
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserRepositoryTests {
@Autowired
private UserRepository userRepository;
@Test
public void test1(){
String name = userRepository.getOne(3L).getUserName();
}
}
@Entity
public class User extends Entitys implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
private Integer id;
@Column(nullable = false, unique = true)
private String userName;
..}
test1将抛出“LazyInitializationException:无法初始化代理 - 无会话”,但是如果我使用userRepository.findByUserName(“aa”)。getUserName()就可以了。虽然问题可以通过添加@Transactional来解决,但我想知道其背后的原因和原因。 我在https://stackoverflow.com/a/34385219/4652536中找到了anwser的一部分,但是findByUserName中的事务是如何工作的?
getOne
为您提供参考,但不是实际的实体。得到一个没有从数据库中获取对象。它只是使用您指定的ID创建一个对象。
如果您希望数据库中的实体使用findById
。
以上是关于spring data jpa getOne抛出LazyInitializationException而findBy没有的主要内容,如果未能解决你的问题,请参考以下文章
当使用getOne和findOne方法时,Spring Data JPA
Spring Data JPA使用getOne方法报错:Method threw 'org.hibernate.LazyInitializationException' excepti
spring data jpa使用repository进行查询,使用userRepository.getOne(id)和userRepository.findById(id)无法从数据库查询到数据
Spring data jpa 在非常具体的场景中抛出 TransientObjectException
使用 spring-data-jpa 和完整的 tomcat-jdbc 配置的 spring boot 为 ResetAbandonedTimer 抛出 java.lang.ClassNotFound
spring boot:JPA org.hibernate.LazyInitializationException: could not initialize proxy [XXX#1] - n(代码