Id 在 Micronaut ReactiveStreamsCrudRepository 中始终为 null
Id always null in Micronaut ReactiveStreamsCrudRepository
我正在尝试在 Micronaut 中实现反应式 (r2dbc) 存储库,但我在查询数据时遇到了一些问题。使用非反应性存储库时不会发生这些问题。
这是我的反应式存储库的样子:
@R2dbcRepository(dialect = Dialect.MYSQL)
public interface ReactiveCampaignRepository extends ReactiveStreamsCrudRepository<Campaign, Integer> {
@Override
Flux<Campaign> findAll();
}
这就是我的常规存储库的样子:
@Repository
public interface CampaignRepository extends CrudRepository<Campaign, Integer> {
}
从 ReactiveCampaignRepository 调用 findAll 方法时,我能够查询所有实体,但它们的 ID 均为空。
当我从 CampaignRepository 调用 findAll 时,将查询所有实体并正确填充 ID。
这是远程依赖项 Campaign 中的 id 字段的样子
@Entity
@Table(name = "campaign")
public class Campaign implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
这个实体是这样自省的:
@Introspected(classes = {Campaign.class})
public class EntitiesConfiguration {
}
我是 micronaut 和 r2dbc 的新手,所以我可能遗漏了一些明显的东西,但我无法弄清楚,如果有任何指点,我们将不胜感激。
谢谢
编辑:
@tmarouane 这只是一个简单的控制器,用于测试是否一切正常。
@Get(value = "/all")
public Flux<CampaignDTO> allCampaigns() {
return reactiveCampaignRepository.findAll().map(CampaignDTO::new);
}
@Get(value = "/all2")
public List<CampaignDTO> allCampaigns2() {
return StreamSupport.stream(campaignRepository.findAll().spliterator(), false).map(CampaignDTO::new).collect(Collectors.toList());
}
和控制器
@Produces(MediaType.APPLICATION_JSON)
@Secured(SecurityRule.IS_AUTHENTICATED)
@Controller("/campaign")
public class CampaignController {
private final CampaignRepository campaignRepository;
private final ReactiveCampaignRepository reactiveCampaignRepository;
public CampaignController(CampaignRepository campaignRepository,
ReactiveCampaignRepository reactiveCampaignRepository
) {
this.campaignRepository = campaignRepository;
this.reactiveCampaignRepository = reactiveCampaignRepository;
}
CampaignDTO 只是一个简单的 DTO class,其中仅使用了 Campaign 字段的一个子集,带有一个采用 Campaign 对象的简单构造函数。
public CampaignDTO(Campaign campaign) {
this.id = campaign.getId();
}
除了 id 还有 1 个属性不是空的,但它自己的属性是空的,我一开始没有发现 - 客户,即使 customer_id 填充在用反应式和非反应式查询的对象中回购协议,这是它在 Campaign
中的样子
@JoinColumn(name = "customer_id", referencedColumnName = "customer_id")
@ManyToOne(optional = false)
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
这似乎在 micronaut 3.0.1 中解决了,但在 3.0.2 中不起作用
我正在尝试在 Micronaut 中实现反应式 (r2dbc) 存储库,但我在查询数据时遇到了一些问题。使用非反应性存储库时不会发生这些问题。 这是我的反应式存储库的样子:
@R2dbcRepository(dialect = Dialect.MYSQL)
public interface ReactiveCampaignRepository extends ReactiveStreamsCrudRepository<Campaign, Integer> {
@Override
Flux<Campaign> findAll();
}
这就是我的常规存储库的样子:
@Repository
public interface CampaignRepository extends CrudRepository<Campaign, Integer> {
}
从 ReactiveCampaignRepository 调用 findAll 方法时,我能够查询所有实体,但它们的 ID 均为空。 当我从 CampaignRepository 调用 findAll 时,将查询所有实体并正确填充 ID。
这是远程依赖项 Campaign 中的 id 字段的样子
@Entity
@Table(name = "campaign")
public class Campaign implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
这个实体是这样自省的:
@Introspected(classes = {Campaign.class})
public class EntitiesConfiguration {
}
我是 micronaut 和 r2dbc 的新手,所以我可能遗漏了一些明显的东西,但我无法弄清楚,如果有任何指点,我们将不胜感激。
谢谢
编辑:
@tmarouane 这只是一个简单的控制器,用于测试是否一切正常。
@Get(value = "/all")
public Flux<CampaignDTO> allCampaigns() {
return reactiveCampaignRepository.findAll().map(CampaignDTO::new);
}
@Get(value = "/all2")
public List<CampaignDTO> allCampaigns2() {
return StreamSupport.stream(campaignRepository.findAll().spliterator(), false).map(CampaignDTO::new).collect(Collectors.toList());
}
和控制器
@Produces(MediaType.APPLICATION_JSON)
@Secured(SecurityRule.IS_AUTHENTICATED)
@Controller("/campaign")
public class CampaignController {
private final CampaignRepository campaignRepository;
private final ReactiveCampaignRepository reactiveCampaignRepository;
public CampaignController(CampaignRepository campaignRepository,
ReactiveCampaignRepository reactiveCampaignRepository
) {
this.campaignRepository = campaignRepository;
this.reactiveCampaignRepository = reactiveCampaignRepository;
}
CampaignDTO 只是一个简单的 DTO class,其中仅使用了 Campaign 字段的一个子集,带有一个采用 Campaign 对象的简单构造函数。
public CampaignDTO(Campaign campaign) {
this.id = campaign.getId();
}
除了 id 还有 1 个属性不是空的,但它自己的属性是空的,我一开始没有发现 - 客户,即使 customer_id 填充在用反应式和非反应式查询的对象中回购协议,这是它在 Campaign
中的样子 @JoinColumn(name = "customer_id", referencedColumnName = "customer_id")
@ManyToOne(optional = false)
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
这似乎在 micronaut 3.0.1 中解决了,但在 3.0.2 中不起作用