spring-data-jpa实体继承

spring-jpa中我们要将SQL映射到对象,尤其是在spring boot这种高度自动化的环境下使用,大量的最优目录结构与命名规则可以大大降低配置,约定大于配置贯穿其中。例如我们定义查询dao,继承JpaRepository即可。然后返回的对象,我们可以定义model:

@Entity
@Table(name = “user_tab_name”)
class User extends BaseUser {
}
这里@Entity让@EntityScan能够扫描到,可以指定名字,@Table也可以不指定,默认为user表,标准命名规则,驼峰转换全小写下划线。
@EnableJpaRepositories可以指定dao的包路径。启动spring老是报错,说是build EntityManager错误,后来发现是model里面定义的不对,model里面完整定义:

@Entity
@Table("user_tab_name")
class User extends BaseUser {
@Id
@GneratedValue
private Long id;
}

发现是我注解不对,但是报出的异常信息实在模糊,博主也是查的很苦,实体manager不能建立,已定要确认是否是model定义问题。然后我的User是要继承抽象类的,但是我如果把字段放抽象类,也会报找不到model.后来去StackOverFlow找到解决方案:

Using @Inheritance

@Entity
@Table(name="TEST")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class Test {
    ...
}

@Entity
public class ExtendedTest 
    extends Test {
    ...
}  
or @MappedSuperclass

@MappedSuperclass
public class Test {
    ...
}

@Entity
public class ExtendedTest 
    extends Test {
    ...
}

第一种方法无效,第二种方法搞定。

你可能感兴趣的:(编程语言,经验总结,源码分析,spring,自动化,entity,继承)