gpt4 book ai didi

java - spring data jpa getOne 抛出 LazyInitializationException 而 findBy 不

转载 作者:搜寻专家 更新时间:2023-10-31 08:25:13 25 4
gpt4 key购买 nike

我使用 spring data 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:无法初始化代理 - 无 session ”,但如果我使用 userRepository.findByUserName("aa").getUserName() 会正常。虽然可以通过添加@Transactional来解决问题,但我想知道这背后的区别和原因。 我在 https://stackoverflow.com/a/34385219/4652536 中找到了部分答案,但是 findByUserName 中的事务如何工作?

最佳答案

getOne为您提供引用,但不是实际实体。 Get one 不会从数据库中获取对象。它只是创建一个具有您指定的 ID 的对象。

如果您想要数据库中的实体,请使用 findById .

关于java - spring data jpa getOne 抛出 LazyInitializationException 而 findBy 不,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49080175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com