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

我正在使用Spring Data JPA和Hibernate作为提供程序。我已经创建了几个扩展到JPARepository<Entity,Serializable>类的存储库类。目前,当我获取一个实体时,我会失败,该实体将附带的/已连接的实体也带到了它!它们通过@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总是也会获取用户实体,但我不想这么做。我怎样才能做到这一点?

谢谢

参考方案

使延迟加载处理可为空的一对一映射,您需要让hibernate执行Compile time instrumentation并将@LazyToOne(value = LazyToOneOption.NO_PROXY)添加到一对一关系。

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

希望这会起作用。

Spring Data Cassandra的事务管理 - java

我正在使用Spring和Cassandra作为基础数据库。曾提到过弹簧伞项目“ spring data cassandra”。与休眠不同,在这里无法找到如何管理事务。如果您中的某些人已经合并,请共享要包含的事务管理器的详细信息。 参考方案 Cassandra不支持传统(ACID)的事务。在某些特殊情况下,可以通过一些构造来实现事务原子性,例如原子批处理(请参…

Spring Boot:java.time.Duration的默认序列化从字符串更改为数字 - java

我们最近从Spring Boot 2.1.9升级到2.2.1,这导致我们的测试失败。调查导致结果,默认情况下java.time.Duration类型现在序列化为不同的序列。现在,我们将得到"PT15M",而不是在JSON消息中包含字符串"900.0"。 POJO定义如下所示@JsonProperty(required …

java:继承 - java

有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

Java:BigInteger,如何通过OutputStream编写它 - java

我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

Java-如何将此字符串转换为日期? - java

我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…