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为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=?
根据休眠规则,无法通过在更新时首先选择ID为ID的对象来将数据保存到数据库中。我该怎么做?谢谢您的回答。
答案 0 :(得分:0)
通过阅读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。
答案 1 :(得分:0)
虽然the answer from Alain Cruz可以正常工作,但我不会按照您的计划进行。
我只需添加一个标准ID字段并设置productId
唯一,例如:
@Id
@GeneratedValue
private Long id;
@Column(unique=true)
private String productId;
然后在ProductInfo存储库中只需添加以下内容:
Optional<ProductInfo> findByProductId(String productId);
答案 2 :(得分:0)
休眠需要一个productId
,因此将生成类型添加到id并使@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(unique=true)
private String productId;
像下面一样唯一,然后让休眠处理所有事情。
+-----+--------+-------+--------+---------+----------------------+
| ID | Name | Lat | Long | Speed | DateTime |
+-----+--------+-------+--------+---------+----------------------+
| 1 | Test | 121 | 2131 | 0 | 10-11-2018T12:00:00 |
| 1 | Test | 121 | 2131 | 100 | 10-11-2018T12:10:00 |
| 1 | Test | 121 | 2131 | 0 | 10-11-2018T01:00:00 |
| 1 | Test | 121 | 2131 | 102 | 10-11-2018T01:10:00 |
+-----+--------+-------+--------+---------+----------------------+