java - JPA 投影获取结果但未将列与界面 View 中的方法匹配

标签 java spring 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();
}

View 是:

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)

没有命名策略,因为您没有使用实体。

关于java - JPA 投影获取结果但未将列与界面 View 中的方法匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69622830/

相关文章:

java - eclipse默认的jpa实现库哪里下载?

hibernate - JPA 查询 org.hibernate.QueryException : could not resolve property

java - 如何使用 xpath 编辑特定的 xml

java - 按下 javafx 按钮时不执行

spring - 使用 Spring amqp 库的请求-响应模式

mysql - Spring Boot JPA 连接验证不起作用

java - JPA 查询语法问题还是什么?! JPA SELECT NEW 语法问题?

java - CDI 编译失败 - 注释类型不适用于此类声明

java - Intent 中的 Action_Send_Multiple 不起作用

java - 我如何使用 Spring 创建一个 HashMap bean