【问题标题】:Projection on hibernate relationship annotation休眠关系注解的投影
【发布时间】:2015-01-21 21:49:41
【问题描述】:

我有两个表,如下所示:

tableA {

private String code;
private String desc;
//few other properties followed by getter and setter
}

tableB {

private String code;
private String desc;
private String tableACode;
//few other properties followed by getter and setter
}

现在,我想在 tableB 中为 tableA 定义一个 @ManyToOne 关系,这样我就想只存储 tableA.desc(我想在缓存时限制这个对象在内存中的大小)。

这样可以吗?

我尝试了类似下面的方法。但结果查询不是我所期望的。

tableB {

private String code;
private String desc;
private String tableACode;


@ManyToOne
@JoinColumnsOrFormulas(value = {@JoinColumnOrFormula(column=@JoinColumn(name = "tableACode", referencedColumnName = "code")),
        @JoinColumnOrFormula(formula = @JoinFormula(value = "SELECT a.desc from tableA e WHERE a.code = tableACode", referencedColumnName = "tableACode"))})
private String tableADesc;
//few other properties followed by getter and setter
}

【问题讨论】:

    标签: java hibernate jpa orm hibernate-mapping


    【解决方案1】:

    只有当您创建 EntityA 以仅包含以下内容时才有可能:

    • 身份证
    • 描述

    然后你可以简单地在EntityB中使用@ManyToOne:

    @ManyToOne
    private EntityA entityA;
    

    因此,即使您的 EntityA 数据库表有多个列,您也只能持久化 desc

    对于新的 EntityA 条目,所有非持久化列都将设置为 NULL,这可能会破坏一些 NOT NULL 约束,因此请注意。

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 1970-01-01
      • 2015-07-17
      • 2013-05-31
      • 2012-11-26
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      相关资源
      最近更新 更多