【问题标题】:Hibernate : collection cache not evictedHibernate:集合缓存没有被驱逐
【发布时间】:2017-12-05 09:33:08
【问题描述】:

我遇到了 Hibernate 集合缓存问题(通过 EHCache)。

所以,这是拥有该集合的实体:

@Entity(name = "Message")
@Table(name = "t_message")
public class Message implements Comparable<Message>{
    @Id
    @Column(name = "message_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER, mappedBy = "message")
    @Sort(type = SortType.NATURAL)
    @JsonIgnore
    @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
    private SortedSet<Event> events = new TreeSet<>();

    // ...
}

然后,在另一个实体中,有一个消息是对称的:

@Entity(name = "Event")
@Table(name = "t_event")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
public class Event implements Comparable<Event>, Comparator<Event> {
    @Id
    @Column(name = "event_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "event_message_id", referencedColumnName = "message_id")
    @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
    private Message message;

    // ...
}

问题:当我添加一个事件时,“事件”字段,缓存没有被驱逐。如果我删除此字段下方的 @Cache 注释,它可以工作,但当然没有缓存。

我认为这与插入新事件(通过实体操作)时,我们将其链接到来自事件端的消息这一事实相关联,因此我在休眠配置文件中添加了这一行:

<property name="hibernate.cache.auto_evict_collection_cache">true</property>

但这并没有解决问题。

附加信息:

  • 其他 ManyToOne 集合缓存在项目上完美运行。
  • 项目中没有原生查询,只有 HQL 和实体操作。
  • 我正在使用 Hibernate 4.3.2 和 EHCache 2.10.4。

感谢您的建议。

【问题讨论】:

    标签: java hibernate ehcache


    【解决方案1】:

    好的,刚刚发现消息的事件字段@OneToMany 注释中缺少“级联”参数:

    @ManyToOne(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY)
    @JoinColumn(name = "event_message_id", referencedColumnName = "message_id")
    @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.TRANSACTIONAL)
    private Message message;
    

    解决了!

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 2019-07-05
      相关资源
      最近更新 更多