java - JPA 投影获取结果但未将列与界面视图中的方法匹配
问题描述
我在 Spring Boot 项目中使用 jpa 投影来获取一些值。我有以下表格:
create table `rental_contract`
(
`rental_contract_id` bigint(20) not null,
`object_id` bigint(20) default null,
`property_id` bigint(20) default null,
primary key (rental_contract_id),
foreign key (property_id, object_id) references property_object (property_id, object_id)
);
以下实体:
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@NamedEntityGraph(
name = "RentalContract.WithPropertyObjects",
attributeNodes = {
@NamedAttributeNode(value = "propertyObject", subgraph =
"RentalContract.WithPropertyObjects.Properties")
},
subgraphs = {
@NamedSubgraph(name = "RentalContract.WithPropertyObjects.Properties",
attributeNodes = {
@NamedAttributeNode(value = "property")
})
}
)
public class RentalContract {
@Id
private Long rentalContractId;
@JoinColumns({
@JoinColumn(name = "object_id"),
@JoinColumn(name = "property_id"),
})
@ManyToOne(fetch = FetchType.LAZY)
private PropertyObject propertyObject;
}
存储库:
public interface RentalContractRepository extends JpaRepository<RentalContract, Long> {
Optional<RentalContract>
findByPropertyObject_ObjectIdAndPropertyObject_Property_PropertyId(Long objectId, Long
propertyId);
@Override
@EntityGraph(value = "RentalContract.WithPropertyObjects")
List<RentalContract> findAll();
@Query(value = "SELECT * from rental_contract", nativeQuery = true)
List<RentalContractView> getAllWithObjectsAndProperties();
}
观点是:
public interface RentalContractView {
Long getRentalContractId();
Long getObjectId();
Long getPropertyId();
}
当我调用存储库方法时,我可以看到我得到了结果和确切的数字,但是当调用该方法getRentalContractId()
时,我得到 null 即使应该有一个值(在数据库中检查)并且其他两个字段不是被映射。
我也尝试创建类并映射它们,但仍然无法正常工作。
解决方案
您必须为列提供别名以匹配界面中的名称:
@Query(value = "SELECT " +
"rental_contract_id as rentalContractId " +
"object_id as objectId " +
"property_id as propertyId" +
"from rental_contract", nativeQuery = true)
没有命名策略,因为您没有使用实体。
推荐阅读
- ios - iOS Testflight - 如何邀请个人测试人员
- c# - 更改 GridView 分页索引时是否可以防止回发?
- traefik - 使 Traefik 路由到不同端口的同一台机器上的服务
- java - 将服务文件中的 observaleList 项目添加到控制器文件中的另一个,但给出空列表
- oracle - IIS 中 mod_proxy ProxyPreserveHost 的等价物?
- javascript - 本地文件的电子 HTTPS
- css - 图像悬停时的 CSS 过渡不起作用
- javascript - 为什么如果我将resolve()放入fs的回调函数中,promise不会返回
- json - 如何加载json文件?
- reactjs - JHipster React 前端(网关)应用程序属性