我使用Spring Data JPA和Hibernate作为提供者。我创建了几个扩展到JPARepository<Entity,Serializable>
类的Repository类。我现在失败了,因为我正在抓取一个它带来连接/连接实体的实体!它们通过@OneToOne
@OneToMany
等连接。如何避免获取这些连接的实体?
我尝试过@OneToMany(fetch=FetchType.LAZY)
等,但仍然没有运气。以下是我的Java代码:
库如何使用Spring数据JPA(JPARepository)实现延迟加载?
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
总是获取用户entit我也不想这样做。我怎么能做到这一点?
感谢
您的代码正在获取用户对象并在票证上设置“创建者”,并且您希望创建者为空? – 2015-01-04 11:40:25
@RC。你是对的,因为映射我必须这样设置!可能是我映射的方式是错误的!任何关于映射部分的想法? – agpt 2015-01-04 11:48:42
OneToOne的延迟读取存在问题(可能在下面的Harshal Patil的答案中解决),但是您应该对OneToMany的延迟读取(fetch = FetchType.LAZY)没有问题。如果字段被这样的注解初始化,这可能意味着你可以在某处之前访问用@OneToMany注解的属性(应该是一个集合或一个列表等)。 – 2015-01-05 08:42:46