V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fgsqqq
V2EX  ›  Java

请教 jpa 大佬 问题

  •  
  •   fgsqqq · 333 天前 · 966 次点击
    这是一个创建于 333 天前的主题,其中的信息可能已经有所发展或是发生改变。
    @entity
    public class parent
    {
    common field1,
    common field2,
    common field3,

    projectA a,
    projectb b,
    projectC c,
    .....
    }
    projectA,projectB,projectC 不属于同一类型。以后,entity parent 还会与 projectX 类型相关联
    在一条记录 entity parent 中 只有某个 projectx 是有值,其他 project 字段都是 null,例如
    parent
    {
    common field1 = some value,
    common field2 = some value,
    common field3 = some value,

    projectA a =null,
    projectB b=null,
    projectC c =some value,
    }
    用法 1 ,我只需要访问 entity parent 公共字段
    用法 2 ,我需要访问 entity parent 公共字段和某个 projectx 的字段

    设计 1
    public class Parent {
    String refNo;
    Long createTime;
    int type;
    @OneToOne
    @JoinColumn(name ="a_id")
    ProjectA a;
    @OneToOne
    @JoinColumn(name ="b_id")
    ProjectB b;
    @OneToOne
    @JoinColumn(name ="c_id")
    ProjectC c;
    ....
    }
    table parent 表 就要不断扩展,不断存储关联键,而且绝大部分是空值,只有一个不为空

    设计 2
    public class Parent {
    String refNo;
    Long createTime;
    int type;
    @OneToOne(mappedBy = "parent")
    ProjectA a;
    @OneToOne(mappedBy = "parent")
    ProjectB b;
    @OneToOne(mappedBy = "parent")
    ProjectC c;

    }

    public class ProjectA {
    @OneToOne
    @JoinColumn(name ="parent_id")
    Parent a;
    }
    @BatchSize(5)
    public class ProjectB {
    @OneToOne
    @JoinColumn(name ="parent_id")
    Parent a;
    }
    每个 projectx 表存储关联键,parent 表没有变化,但是我不确定这种方法
    有没有性能问题,而且 @BatchSize 不生效

    我不知道哪种设计好,还是有其他设计,最好是 parent 表没影响,而且没性能问题
    stone981023655
        1
    stone981023655  
       333 天前
    重新排版一下吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4332 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:33 · PVG 13:33 · LAX 21:33 · JFK 00:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.