我有两个类如下:
@Entity
@Table(name = "customer ")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "customer_invoices")
private List<Invoices> invoicesList;
}
和
@Entity
@Table(name = "invoice")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Invoice{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String value;
}
和
@ApplicationScoped
public class CustomerServiceImpl implements CustomerService{
@Inject
CustomerRepository customerRepository ;
@Override
public Uni<List<Customer>> findAll() {
return customerRepository.listAll().onItem().transformToMulti(Multi.createFrom()::iterable).onItem().call(customer-> Mutiny.fetch(customer.getInvoicesList())).collect().asList();
}
@Override
public Uni<Customer > saveCustomer(Customer customer) {
return customerRepository.persistAndFlush(customer);
}
@Override
public Uni<Customer > updateCustomer(Customer customer) {
/// what should I put ???
}
}
和
@ApplicationScoped
public class CustomerRepository implements PanacheRepositoryBase<Customer, Integer> {
}
我尝试了许多代码,使更新的客户与一些发票的可能性,但没有成功。
有人能给我指路吗?
1条答案
按热度按时间3zwjbxry1#
首先,您需要启动一个事务和一个会话,您需要在其中检索Customer实体。
之后,您可以通过调用实体的setter方法来更新实体。
然后,您需要提交事务。
并且在你的控制台上启用sql日志,这样你就可以看到后台发生了什么。
注意:entitymanager上还有一个update方法,可以直接更新你的实体,而不需要先检索它。但是如果你事先知道你想更新哪些属性,这是很方便的。