gpt4 book ai didi

java - 在插入多对多表之前, hibernate 选择多个列

转载 作者:行者123 更新时间:2023-12-01 15:26:54 26 4
gpt4 key购买 nike

我有两个具有多对多关系的实体CustomerProduct

`

@ManyToMany(cascade = CascadeType.MERGE, fetch=FetchType.LAZY)
@JoinTable(
name = "customer_products",
joinColumns={@JoinColumn(name="customer_id")},
inverseJoinColumns = {@JoinColumn(name="product_id")})
@CollectionId(
columns = @Column(name="id"),
type = @Type(type="long"),
generator = "native"
)
public Collection<Product> getProducts() {
return products;
}
public void addProduct(Product product){
this.products.add(product);
}
public void setProducts(Collection<Product> products) {
this.products = products;
}

`

我想添加客户产品

`

    Customer customer = (Customer)session.load(Customer.class, new Long(1));
Product product = (Product) session.load(Product.class, new Long(1));
customer.addProduct(product);
session.persist(customer);`

代码的作用是,它从表 CustomerProducts 中选择所有列,并仅将这些表中的 ids 插入 customer_products 表。有没有办法从上面的表中只选择 ids

最佳答案

可以从列中检索单独的实体数据,而无需使用 JPA/Hibernate 实例化整个实体对象。

这对于一对一关系来说是完美的,但不确定多对多关系:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Object[]> q = cb.createQuery(Object[].class);
Root<Customer> c = q.from(Customer.class);
q.select(cb.array(c.get("id"), c.get("products").get("id")));

List<Object[]> results = em.createQuery(q).getResultList();
for (Object[] result : results) {
System.out.println("Customer id: " + result[0] + ", Product id: " + result[1]);
}

仍然值得一试,可能会让你走上正轨。 Look for more information on JPQL and CriteriaBuilder queries.

顺便说一句,如果您能提供为什么需要这样做的原因,也许我们可以从新的角度提供替代解决方案,因为现在我们不明白为什么需要这样做。

关于java - 在插入多对多表之前, hibernate 选择多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10049773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com