Реактивный Panache Quarkus и естественные ключи
Я создаю кеш объектов и пытаюсь сохранить их по мере их получения в моей БД (Stripe Webhooks, если вы знакомы). Но по какой-то причине я не могу заставить ни один из них сохраняться, хотя ошибок нет....
ПРИМЕЧАНИЕ: не позволяйте GET сбить вас с толку, я изменил его на GET, чтобы мне было проще его протестировать .... это будет POST, если он когда-либо сработает (да, я немного расстроен, пробуя разные варианты все выходные. нет. конечно, если это только я, но этот материал кажется очень плохо определенным, вы можете найти полдюжины статей, каждая из которых дает мне разные подходы)
@Path("/events/{realm}/add")
@GET
@ReactiveTransactional
public Uni<Response> add(@PathParam("realm") String realm, @QueryParam("id") String id) {
return Panache.withTransaction(() -> StripeAccount.findRealm(realm)
.onItem().transform(a -> new StripeCustomer(realm,id)).onItem().invoke(e -> e.persist())
).onItem().ifNotNull().transform(e -> Response.ok(e).build())
.onItem().ifNull().continueWith(Response.ok().status(NOT_FOUND)::build);
}
Я пробовал указанную выше конечную точку с ReactiveTransactional и без нее, а также с «withTransaction()» и без нее, но он никогда не сохраняется в базе данных mysql, хотя новый объект возвращается в ответе, и ошибки не выдаются.
@Entity
@Table(name="Customers")
public class StripeCustomer extends PanacheEntityBase {
@Id
@Column(name = "cust_id")
public String id;
@Column(name = "cust_realm")
public String realm;
public StripeCustomer(String realm, String id) {
this.realm = realm;
this.id = id;
}
}
Идентификатор — это естественный ключ, который я получаю от Stripe, и я не знаю, является ли это частью проблемы. Я также пытался обозначить @Id по-разному, но, похоже, ничего не помогает. Я также попытался расширить PanacheEntity и разрешить JPA создать избыточный ключ, но это тоже не помогло.