gpt4 book ai didi

java - Hibernate - 仅使用 id 设置 ManyToOne 列值,无需对象实例

转载 作者:行者123 更新时间:2023-12-02 00:47:05 26 4
gpt4 key购买 nike

我有这些表:

Name: product
Rows: id

Name: order_product
Rows: id, product_id

在java中映射如下:

@Entity
@Table(name = "product")
public class Product{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "product")
private Set<OrderProduct> orderProductList = new LinkedHashSet<>();

//...

}

@Entity
@Table(name = "order_product")
public class OrderProduct{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "product_id")
private Product product;

//...

}

当我想创建一个新的 OrderProduct 时,我会这样做:

//existing info
productId = 1;

//get from db product which have id 1
Product product = session.createQuery("FROM Product WHERE id = :pId", Product.class)
.setParameter("pId", productId)
.getSingleResult();

//create order product
OrderProduct newOrderProduct = new OrderProduct();
newOrderProduct.setProduct(product);

//put in db
session.save(newOrderProduct);

我想要的是删除需要从数据库获取产品的部分。

我想直接使用 ID 来 newOrderProductsetProduct

newOrderProduct.setProduct(productId);

我知道我可以通过消除ManyToOne并将变量product声明为Integer来做到这一点。但我不想失去 ManyToOne 的好处。

有没有一种方法可以仅通过 id 设置产品,而不需要 Product 实例?

最佳答案

这可以通过 FluentJPA 来完成:

public boolean createOrderProduct(int productId) {
FluentQuery query = FluentJPA.SQL((OrderProduct op) -> {
INSERT().INTO(op);
VALUES(row(productId));
});
return query.createQuery(em).executeUpdate() > 0;
}

生成的 SQL:

INSERT   INTO order_product t0 
VALUES (?1)

详细INSERT解释。

关于java - Hibernate - 仅使用 id 设置 ManyToOne 列值,无需对象实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57887521/

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