当存在两个或多个具有相同名称的实体时,选择默认实体 - Spring Boot,Spring Data JPA,

Sad*_*ath 1 spring hibernate jpa spring-data-jpa spring-boot

我正在使用spring数据jpa来实现持久性.如果存在多个具有相同名称的实体,是否有一种方法可以将一个实体标记为默认值.类似@Primary注释的东西用于解决多个bean依赖问题

@Entity(name = "ORGANIZATION")
@Table(name = "ORGANIZATION")
public class DefaultOrganization {
     ***
}

@Entity(name = "ORGANIZATION")
@Table(name = "ORGANIZATION")
public class Organization {
     ***
}
Run Code Online (Sandbox Code Playgroud)

更新

让我说清楚一点.我正在使用spring-boot @EntityScan注释执行包扫描,如果在两个不同的包中找到两个具有相同名称的实体,则应该有一种方式,其中只有一个实体被选中和注册而另一个被拒绝.就实体名称而言,即使我知道没有两个实体可以具有相同的名称.我在spring-boot和spring-data-jpa的上下文中问这个问题

@Entity(name = "ORGANIZATION")
@Table(name = "ORGANIZATION")
@PrimaryEntity
public class DefaultOrganization {
     ***
}

@Entity(name = "ORGANIZATION")
@Table(name = "ORGANIZATION")
public class Organization {
     ***
}
Run Code Online (Sandbox Code Playgroud)

由于DefaultOrganization标有@PrimaryEntity,因此应该通过@EntityScan选择DefaultOrganization,而应拒绝组织.

注意: @PrimaryEntity是非JPA标准自定义注释,可由spring-boot @EntityScan处理

Bud*_*tne 6

即使实体驻留在两个不同的包中,也不可能为一个项目的两个不同实体具有重复的名称.

参考1

实体类名称

默认情况下,实体名称是实体类的非限定名称(即不包括包名称的短类名称).可以使用Entity批注的name属性显式设置不同的实体名称:

@Entity(name="MyName")
public class MyEntity {

}
Run Code Online (Sandbox Code Playgroud)

实体名称必须是唯一的.当不同包中的两个实体类共享相同的类名时,需要显式实体名称设置以避免冲突.