[英]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.