有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java spring数据jpa getOne抛出LazyInitializationException,findBy not

我使用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()可以。虽然这个问题可以通过add@Transactional来解决,但我想知道其中的区别和原因
我在https://stackoverflow.com/a/34385219/4652536中找到了anwser的一部分,但是findByUserName中的事务如何工作呢


共 (1) 个答案

  1. # 1 楼答案

    ^{}获取引用,但不获取实际实体。Get one不从数据库中获取对象。它只创建一个具有指定ID的对象

    如果要从数据库中获取实体,请使用^{}