Java 如何在加载时无缝地本地化hibernate(JPA)实体

Java 如何在加载时无缝地本地化hibernate(JPA)实体,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,如何无缝地本地化实体? 我有一个带有一些本地化字段的对象(实体),我希望通过以下方式访问这些本地化字段:Entity.getField() 本地化基于客户端上下文 为了实现这一点,我对本地化字段使用了瞬态字段,并且在onLoad方法中实现Hibernate EmptyInterceptor的帮助下,我正在使用本地化值设置这些字段。局部值保存在单独的表中。这是可行的,但我认为应该有更好的解决办法 @Entity public class Card { private Long id;

如何无缝地本地化实体? 我有一个带有一些本地化字段的对象(实体),我希望通过以下方式访问这些本地化字段:Entity.getField()

本地化基于客户端上下文

为了实现这一点,我对本地化字段使用了瞬态字段,并且在onLoad方法中实现Hibernate EmptyInterceptor的帮助下,我正在使用本地化值设置这些字段。局部值保存在单独的表中。这是可行的,但我认为应该有更好的解决办法

@Entity 
public class Card {

    private Long id;

    @Transient
    private String name;



}

@Entity
public class LocalizedCard{

    @Id
    private Long id;
    @ManyToOne
    private Card card;
    private Language language;
    private String localisedName;

}

and the interceptor

public class MyInterceptor  extends EmptyInterceptor {


    @Override
    public boolean onLoad(
            Object entity,
            Serializable id,
            Object[] state,
            String[] propertyNames,
            Type[] types) {


        if (entity instanceof Card) {
              Card c = (Card) entity;
c.setName(service.getLocalisedCardName());
return true;
            }



        return false;
    }
}

“无缝”对你意味着什么?总的来说,我认为这种方法不是最好的,本地化应该只在演示中进行。但是,如果有充分的理由,我会将其放入带有
@PostLoad
.seamlees的实体中-我的意思是,当sombody与实体一起工作时,他不必为本地化而烦恼。我知道更好的方法是只在表示层使用本地化。在这种情况下,我们使用(相同的)产品表,这些产品在特定国家具有不同的名称和名称。这些本地化字段用于发票等(与价目表等价)。此外,该项目大量使用网格,我认为为大量行和字段调用“本地化服务”会导致性能问题。无论如何,感谢您的评论。我仍然认为没有立即需要本地化实体而不是演示文稿,并将认真重新考虑这一点。然而,您只能缓存您的服务方法或在数据库级别(通过连接)进行本地化;可能是后者,因为这将是您的服务方法所做的。但首先:您是否衡量了性能问题?如果是的话,这是一个可以通过向它扔硬件来廉价解决的问题吗?