繁体   English   中英

如何使用 Spring 数据 JPA (JPARepository) 实现延迟加载?

[英]How to implement lazy loading using Spring data JPA (JPARepository)?

我使用 Spring Data JPA 和 Hibernate 作为提供者。 我创建了几个扩展到JPARepository<Entity,Serializable>类的 Repository 类。 当我获取一个实体时,我失败了,它带来了附加/连接的实体! 通过@OneToOne @OneToMany等连接。如何避免获取那些连接的实体?
我已经尝试过@OneToMany(fetch=FetchType.LAZY)等,但仍然没有运气。 以下是我的java代码:
存储库

public interface TicketRepository extends JpaRepository<Ticket, Integer>{

}  

票务实体

@Entity
@Table(name = "tbl_tickets")
public class Ticket {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @Column(name = "customer", nullable = false, length = 256)
    private String customer;


    @OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
    @JoinColumn
    private User creator; 

    // ... other properties
}  

服务

@Service
public class TicketService {

  public Ticket save(Ticket obj,String id) {
       User user = userService.findById(Integer.valueOf(id));
       obj.setCreator(user);
       Ticket savedTicket = ticketRepository.save(obj);
   }
}  

savedTicket总是获取我不想获取的 User 实体。 我怎么能做到这一点?
在此处输入图片说明

谢谢

在可空的一对一映射上进行延迟加载,您需要让休眠进行编译时检测并将@LazyToOne(value = LazyToOneOption.NO_PROXY)添加到一对一关系中。

@OneToOne(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn
@LazyToOne(value = LazyToOneOption.NO_PROXY)
private User creator;

希望这会奏效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM