Spring Roo 2.0.RC1 - 具有空值的实体投影元素不显示在列表中

Spring Roo 2.0.RC1 - Entity Projecttion Elements with null values don't show in list

我更改了诊所示例并为宠物添加了实体投影。

entity projection --class ~.domain.PetInfo --entity ~.domain.Pet --fields id,name,type,birthDay,owner --entityFormatExpression "#{name} (#{type})"
repository jpa --entity ~.domain.Pet --interface ~.repository.PetRepository --defaultReturnType ~.domain.PetInfo

我已经删除了所有宠物查找器。取景器必须更改使用 PetInfo 作为 return 类型 - 所以我删除了它们以仅测试实体投影。

在我添加实体投影之前,列表显示 Table 宠物中的所有条目,有和没有设置所有者。

当我在列表中添加实体投影时,只显示所有者不为空的项目。

我使用 mysql 数据库并更改设置:

// Create the Spring Boot application
project setup --topLevelPackage org.springframework.roo.clinic --projectName clinic_new --java 8

// Setup the data access layer
// jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
jpa setup --provider HIBERNATE --database MYSQL --databaseName clinic --userName root --password
// --force funktioniert nicht also erst löschen un dann neu hinzufügen
property remove --key spring.datasource.url
property add --key spring.datasource.url --value jdbc:mysql://localhost:3307/clinic --force
property add --key spring.jpa.properties.hibernate.hbm2ddl.auto --value update
property add --key spring.jpa.properties.hibernate.dialect --value org.hibernate.dialect.MySQL5Dialect
property add --key spring.jpa.hibernate.naming.physical-strategy --value org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
property remove --key spring.messages.encoding
property add --key spring.messages.encoding --value UTF-8
property add --key spring.jpa.hibernate.show-sql --value true

Spring Roo 在 PetRepositoryImpl_Roo_Jpa_Repository_Impl.aj 文件中生成以下代码:

JPQLQuery<Pet> query = from(pet);
[...]
return loadPage(query, pageable, Projections.constructor(PetInfo.class, pet.id, pet.name, pet.type, pet.owner ));

默认情况下,loadPage函数会生成一个INNER JOIN,拥有者table,因此只会显示与Owner相关的宠物元素。

为防止这种情况发生,您应该插入 findAll 方法并定义 leftJoin 语句。

JPQLQuery<Pet> query = from(pet).leftJoin(pet.owner);

这样的话,你应该可以得到所有有亲缘关系和没有亲缘关系的宠物了。

希望对您有所帮助,