paw*_*que 7 java identity design-patterns hibernate flyweight-pattern
有没有办法使用具有休眠持久性映射的Flyweight对象?我的数据模型包含许多相同的对象.我不想为每个相同的对象设置单独的实例,而是使用Flyweight设计模式并始终引用相同的物理对象.如何在hibernate中实现这一点?
顺便说一句.所有JVM都以某种方式优化字符串的使用,这样当多次使用相同的字符串时,它总是相同的物理实例?
这取决于。
对于只读值,您可以通过创建自定义 UserType 轻松实现享元模式,该自定义 UserType 将从池中返回对象而不是每次都返回新实例。
对于实体,Hibernate 默认情况下是理智的,并且希望在事务之间保持一致,因此不会在会话之间共享实体以避免数据的竞争条件 - 我认为这不是您想要的。
但如果是这样(在不真正知道你在做什么的情况下完全不建议这样做),你可以实现 Interceptor.getEntity() ,它用于二级缓存。在该方法中,您可以返回一个实体(甚至一些由其他会话共享的实体),并且您将有效地为您的实体拥有享元模式。
但为了数据的一致性,我强烈建议不要这样做——让实体引用实际的不可变的享元值比尝试对实际实体进行享元要好得多。