hibernate 如何在Quarkus中创建一个函数来确保通过@OneToMany关联的两个模型类之间的更新?

b1payxdu  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(89)

我有两个类如下:

@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> {
}

我尝试了许多代码,使更新的客户与一些发票的可能性,但没有成功。
有人能给我指路吗?

3zwjbxry

3zwjbxry1#

首先,您需要启动一个事务和一个会话,您需要在其中检索Customer实体。
之后,您可以通过调用实体的setter方法来更新实体。
然后,您需要提交事务。
并且在你的控制台上启用sql日志,这样你就可以看到后台发生了什么。
注意:entitymanager上还有一个update方法,可以直接更新你的实体,而不需要先检索它。但是如果你事先知道你想更新哪些属性,这是很方便的。

相关问题