Hibernate 2 级缓存一对一不起作用

Fee*_*eco 6 java hibernate spring-data-jpa

我将 Ehcache 提供程序用于 Hibernate 2 级缓存。它缓存一对多集合,用 注释@Cache,但不缓存一对一:

//hb annotations
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region = "user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "user")
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region = "details")
    private Details details;

    //getters, setters, constructors etc.

}

//hb annotations
public class Details {

    @GenericGenerator(name = "generator", strategy = "foreign",
    parameters = @Parameter(name = "property", value = "user"))
    @Id
    @GeneratedValue(generator = "generator")
    @Column(unique = true, nullable = false)
    private Integer id;

    @OneToOne
    @PrimaryKeyJoinColumn
    private User user;

    //getters, setters, constructors ets.

}
Run Code Online (Sandbox Code Playgroud)

我使用 Spring JpaRepository 来获取数据:

userRepository.findOne(id);
Run Code Online (Sandbox Code Playgroud)

Dra*_*vic 6

对于ToOne关联,只有关联实体实例的 id(外键)缓存在拥有实例的条目中:

Hibernate 以脱水形式存储缓存的实体,这类似于数据库表示。除了@ManyToOne@OneToOne子端关联的外键列值,实体关系不存储在缓存中。

因此,当拥有实例从 L2 缓存组装时,关联实体必须通过其 id 加载。为避免这种情况,请使关联实体(Details在您的情况下)也可缓存。

也可在此处此处获得更多详细信息。