代码之家  ›  专栏  ›  技术社区  ›  Nathan Feger

父类中的@Id和基类中的唯一序列的正确JPA映射是什么

  •  9
  • Nathan Feger  · 技术社区  · 16 年前

    我有一个类层次结构:

    abstract DomainObject {
    ...
        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="SEQ")
        @SequenceGenerator(name="SEQ",sequenceName="SEQ_DB_NAME")
        @Column(name = "id", updatable = false, nullable = false)
        private Long id;
    ...
    }
    
    BaseClass extends DomainObject {
    ...
       // Fill in blank here where this class's @Id will use a unique sequence generator
       // bonus points for any sort of automatic assignment of generator names that might 
       //prevent me from having to instrument all my domain objects uniquely
    ...
    }
    

    • 我并不特别需要基类生成器,所以如果需要的话,我可以删除它。

    2 回复  |  直到 16 年前
        1
  •  8
  •   Nathan Feger    16 年前

    好吧,这就是我最终解决问题的方法:

    @MappedSuperclass
    public abstract class DomainObject implements Serializable {
     @Id
     @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="SEQ")
     @Column(name = "id", updatable = false, nullable = false)
     private Long id;
    
     .. rest of class
    }
    

    @Entity
    @SequenceGenerator(name="SEQ",sequenceName="SEQ_DB_NAME")
    public class BusinessObject extends DomainObject {
    
     ...
    
    }
    
        2
  •  0
  •   Chris Dail    16 年前

    @Inheritance(strategy=InheritanceType.JOINED)
    

    我用过这个,它似乎效果很好。

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;