簡體   English   中英

JPA投影得到結果但與界面視圖中的方法不匹配

[英]JPA projection getting results but not matching the columns with the methods in the interface view

我在 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()時,即使應該有一個值(在數據庫中檢查)和另外兩個值,我也得到了空值未映射字段。

我也嘗試過創建類並映射它們,但仍然無法正常工作。

您必須為列提供別名以匹配界面中的名稱:

@Query(value = "SELECT " +
               "rental_contract_id as rentalContractId " +
               "object_id          as objectId " +
               "property_id        as propertyId" +
               "from rental_contract", nativeQuery = true)

沒有命名策略,因為您沒有使用實體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM