`

JPA中的@MappedSuperclass

 
阅读更多

JPA中的@MappedSuperclass

说明地址:http://docs.oracle.com/javaee/5/api/javax/persistence/MappedSuperclass.html

用来申明一个超类,继承这个类的子类映射时要映射此类中的字段,可以当做是对entity抽取封装的类。如果子类想重写此类的映射信息,可以使用 AttributeOverride and AssociationOverride annotations

 

 Example: Concrete class as a mapped superclass
@MappedSuperclass
public class Employee {
    
        @Id 
        protected Integer empId;
        @Version 
        protected Integer version;
        @ManyToOne @JoinColumn(name="ADDR")
        protected Address address;
    
        public Integer getEmpId() { ... }
        public void setEmpId(Integer id) { ... }
        public Address getAddress() { ... }
        public void setAddress(Address addr) { ... }
}
    
// Default table is FTEMPLOYEE table
@Entity
public class FTEmployee extends Employee {
    
        // Inherited empId field mapped to FTEMPLOYEE.EMPID
        // Inherited version field mapped to FTEMPLOYEE.VERSION
        // Inherited address field mapped to FTEMPLOYEE.ADDR fk
        
    // Defaults to FTEMPLOYEE.SALARY
    protected Integer salary;
    
    public FTEmployee() {}
    
    public Integer getSalary() { ... }
    
    public void setSalary(Integer salary) { ... }
}
    
    @Entity @Table(name="PT_EMP")
    @AssociationOverride(name="address", 
    joincolumns=@JoinColumn(name="ADDR_ID"))
    public class PartTimeEmployee extends Employee {
    
        // Inherited empId field mapped to PT_EMP.EMPID
        // Inherited version field mapped to PT_EMP.VERSION
        // address field mapping overridden to PT_EMP.ADDR_ID fk
        @Column(name="WAGE")
        protected Float hourlyWage;
    
        public PartTimeEmployee() {}
    
        public Float getHourlyWage() { ... }
        public void setHourlyWage(Float wage) { ... }
    }

    Example: Non-entity superclass

    public class Cart {
    
        // This state is transient
        Integer operationCount;
    
        public Cart() { operationCount = 0; }
        public Integer getOperationCount() { return operationCount; }
        public void incrementOperationCount() { operationCount++; }
    }
    
    @Entity
    public class ShoppingCart extends Cart {
    
        Collection items = new Vector();
    
        public ShoppingCart() { super(); }
    
    
    ...
    
        @OneToMany
        public Collection getItems() { return items; }
        public void addItem(Item item) {
            items.add(item);
            incrementOperationCount();
        }
    }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics