java - hibernate Spring Data JPA如何保存带有id的对象

标签 java mysql hibernate spring-data-jpa

public class ProductInfo {

    @Id
    private String productId;

    /** 名字. */
    private String productName;

    /** 单价. */
    private BigDecimal productPrice;
    ...
<小时/>
    @Test
    public void saveTest() {
        ProductInfo productInfo = new ProductInfo();
        productInfo.setProductId("123456");
        productInfo.setProductName("皮蛋粥");
        productInfo.setProductPrice(new BigDecimal(3.2));
        productInfo.setProductStock(100);
        productInfo.setProductDescription("很好喝的粥");
        productInfo.setProductIcon("http://xxxxx.jpg");
        productInfo.setProductStatus(0);
        productInfo.setCategoryType(3);

//        ProductInfo result = repository.save(productInfo);
        ProductInfo result = repository.saveAndFlush(productInfo);
        Assert.assertNotNull(result);
    }

我想保存一个带有ID的对象,该对象没有记录在数据库中。

Hibernate: 
    select
        productinf0_.product_id as product_1_3_0_,
        productinf0_.category_type as category2_3_0_,
        productinf0_.create_time as create_t3_3_0_,
        productinf0_.product_description as product_4_3_0_,
        productinf0_.product_icon as product_5_3_0_,
        productinf0_.product_name as product_6_3_0_,
        productinf0_.product_price as product_7_3_0_,
        productinf0_.product_status as product_8_3_0_,
        productinf0_.product_stock as product_9_3_0_,
        productinf0_.update_time as update_10_3_0_ 
    from
        product_info productinf0_ 
    where
        productinf0_.product_id=?
Hibernate: 
    update
        product_info 
    set
        create_time=?,
        product_price=?,
        update_time=? 
    where
        product_id=?

根据hibernate的规则,在update时不可能通过先选择ID号的对象来将数据保存到数据库中。我该怎么做?谢谢您的回答。

最佳答案

通过阅读 Hibernate 文档,保存操作仅保留具有自动生成 id 的实体。因此,如果您打算自己设置 id,那么您需要的就是更改 persist 的插入方法。

@Test
public void saveTest() {
    ProductInfo productInfo = new ProductInfo();
    productInfo.setProductId("123456");
    productInfo.setProductName("皮蛋粥");
    productInfo.setProductPrice(new BigDecimal(3.2));
    productInfo.setProductStock(100);
    productInfo.setProductDescription("很好喝的粥");
    productInfo.setProductIcon("http://xxxxx.jpg");
    productInfo.setProductStatus(0);
    productInfo.setCategoryType(3);

    // Insert new product.
    repository.persist(productInfo);
}

有关更多信息,您可以查看此 blog

关于java - hibernate Spring Data JPA如何保存带有id的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53142938/

相关文章:

MySQL @local_variable 不能连续工作

PHP 和 MySQL 循环有帮助吗?

java - 捕获 oracle 序列并将其设置到 JPA 中的另一个字段

java - @PropertySource @Value 静态字符串返回 null

java - 如何使用 JavaPoet 生成调用父类(super class)构造函数的构造函数

java - 使用 jqGrid 压缩 JSON

java - Hibernate多对多数据检索

java - 垃圾收集器如何处理 Java 中的原始数据类型?

java - 在 JSP 中获取返回值

java - hibernate 应该为每个表使用唯一的序列吗?