我有基本实体 - 带继承的UserEntity:加入:
@Entity
@Table(name = "users")
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode()
@Inheritance(strategy = InheritanceType.JOINED)
public class UserEntity implements UserDetails {
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_seq")
@SequenceGenerator(name = "user_seq", sequenceName = "user_id_seq", allocationSize = 1)
private Long id;
//other fields
}
和chield实体:AdminEntity,PartnerEntity,ClientEntity。
例如ClientEntity:
@Entity
@Table(name = "client")
@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@PrimaryKeyJoinColumn(name = "client_id", referencedColumnName = "id")
public class ClientEntity extends UserEntity {
//other fields
}
我有疑问,我不需要知道与我合作的用户类型。 为清楚起见,您可以在需要重置密码时提供功能。您需要找到用户并创建密码重置令牌。 在jpa存储库中,我有通过电子邮件找到用户的简单方法
Optional<UserEntity> findByEmail(String email);
但是我看到hibernate做了3个左连接来找出我正在处理的用户类型。 我该如何解决这个问题并获得基类?我正在尝试向UserEntity添加此注释:
@Polymorphism(type = PolymorphismType.EXPLICIT)
但它不起作用。 当我试图写这样的查询
@Query("select u from UserEntity u where type (u) = UserEntity and u.email = :email")
Optional<UserEntity> findByEmail(@Param("email")String email);
但我总是无效。 我知道我可以将策略更改为SINGLE_TABLE,但在此类查询中,所有字段都将从我不需要的数据库中获取。 有什么想法吗?