java - Hibernate:直接在bean中设置Id和调用load()或get()方法的区别?

标签 java hibernate jpa orm hibernate-mapping

以下是加载示例:-

Stock stock = (Stock)session.load(Stock.class, new Integer(2));
           StockTransaction stockTransactions = new StockTransaction();
           //set stockTransactions detail
           stockTransactions.setStock(stock);        
           session.save(stockTransactions);

如果我直接设置 id 有什么区别:-

Stock stock =new Stock();
stock.setId(2);
 StockTransaction stockTransactions = new StockTransaction();
               //set stockTransactions detail
               stockTransactions.setStock(stock);        
               session.save(stockTransactions);

因为我已经知道股票表的 ID。是调用负载还是获取?

最佳答案

What is the difference ...

您的第一个代码示例从数据库中获取对象,因此加载的对象将处于持久化状态。您的第二个示例将尝试使用全新 Stock 保存StockTransaction。这可能会导致主键错误(如果股票 ID 是唯一的)或重复条目。您应该根据您的要求选择使用哪种方式。如果您需要使用现有 StockStockTransaction(我假设这是您的情况,因为您写的是您知道 ID)- 您应该首先从数据库加载它。

Y call the load or get?

Session.load()如果数据库中没有这样的对象(具有这样的 id),将返回一个空字段的代理。

Session.get()如果没有具有该 ID 的对象,将返回 null。

使用哪一个取决于您和您的任务。我个人更喜欢 get()

关于java - Hibernate:直接在bean中设置Id和调用load()或get()方法的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23862969/

相关文章:

java - Java中的 "Double"和 "double"有什么区别?

java - 为什么在屏障操作执行后无法立即获取 cyclingBarrier?

hibernate - 我想知道 Hibernate 是否有办法执行 ColumnTransformer 的编程配置?

java - Hibernate 和 Cayenne 的比较

java - 为什么这个数据库同步例程失败?

java - 一对多 : java. sql.SQLSyntaxErrorException:表 'table_name' 不存在

java - 集中配置管理

java - 如何根据 build.properties 中的值配置 hibernate.cfg.xml、struts.xml、MessageResources.properties

java - 使用 JPA Criteria API 查询 Enum 的 ElementCollection

c# - 启动时对象初始化的模式