如何解决SpringData JPA 动态投影从 MySQL 中检索所有列
WidgetsBinding.instance.addPostFrameCallback(() {
final RenderBox renderBox = context.findRenderObject();
});
它实现了这个接口:
@Entity
@Table(name = "account")
@Getter
@Setter
@SuppressWarnings("serial")
public class AccountEntity implements AccountBaseEntity,AccountRoleEntity,Serializable {
@Id
@GeneratedValue(generator = "uuid2")
@Column(name = "account_id")
private UUID accountId;
@Column(name = "email")
@NotBlank
private String email;
@Column(name = "role")
@NotBlank
private String role;
@Column(name = "creation_time")
@NotNull
private Timestamp creationTime;
}
然后我有一些计划也在实施。例如:
public interface AccountBaseEntity {
UUID getAccountId();
}
这是我的存储库,它具有动态投影:
public interface AccountRoleEntity extends AccountBaseEntity {
String getRole();
}
我将它与此代码一起使用:
public interface AccountsRepository extends JpaRepository<AccountEntity,UUID> {
<T extends AccountBaseEntity> T findByEmail(String email,Class<T> type);
}
我检查了设置 Spring-Boot 属性 AccountRoleEntity accountRoleEntity = accountsRepository.findByEmail(email,AccountRoleEntity.class);
的查询,这是我看到的:
spring.jpa.show-sql = true
我希望查询仅选择 account_id 和 role 列,但它似乎正在检索实体并将其转换为投影,而不是检索投影本身。这是错误还是我做错了什么?
解决方法
我刚刚意识到这是因为 AccountEntity
扩展了 AccountRoleEntity
。这是正常行为吗?
我希望实体扩展投影,以便我可以在某些方法中使用一个通用接口,该接口应该同时与实体和投影一起使用。
编辑:
如此处所述 (https://github.com/spring-projects/spring-data-jpa/issues/2179),这是预期的行为。这通过创建一个由实体和投影共同实现的超级接口来解决。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。