【问题标题】:Hibernate populate only one tableHibernate 只填充一张表
【发布时间】:2014-02-19 05:48:46
【问题描述】:

在我的项目中,我使用 xml(不是注释)将数据库映射到类,我已将两个表映射到一个类,如下所示。

<hibernate-mapping>
  <class name="com.fg.fixtransbridge.model.BookStatistics"
    entity-name="BookStatistics" table="book_statistics">       
  </class>

  <class name="com.fg.fixtransbridge.model.BookStatistics"
    entity-name="BookStatisticsHistory" table="book_statistics_copy">
  </class>
</hibernate-mapping>  

当我尝试一次向两个表中添加数据时,只有 book_statistics 表被填满。这是因为我把它称为第一

b 是 BookStatistics 实例,其中填充了数据

    session.saveOrUpdate("BookStatistics", b);
    session.saveOrUpdate("BookStatisticsHistory", b);

如果我第一次调用 session.saveOrUpdate("BookStatisticsHistory", b),那么只有另一个表被填满。

    SessionFactory sessionFactory;
    ServiceRegistry serviceRegistry;

    Configuration configuration = new Configuration();
    configuration.configure();
    serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
    sessionFactory = configuration.buildSessionFactory(serviceRegistry);

    Session session = sessionFactory.openSession();

    session.beginTransaction();
    session.saveOrUpdate("BookStatistics", b);
    session.saveOrUpdate("BookStatisticsHistory", b);     
    session.getTransaction().commit();

那么有没有办法使用单一服务来填充这两个表。提前致谢

【问题讨论】:

  • 什么是 b ?一个 BookStatistics 或 BookStatisticsHistory,我假设它是 BookStatistics 实例,我是正确的
  • 对不起,是的。这是一个 BookStatistics 实例。反正没有 BookStatisticsHistory 类
  • @Koitoer 你有什么答案吗?? :)

标签: java database hibernate pojo


【解决方案1】:

您可以通过使用两个会话来做到这一点。喜欢,

Session session1 = sessionFactory.openSession();
Session session2 = sessionFactory.openSession();

但我认为这不是很好的做法。无论如何,一个 DAO 中不需要两个表。这也不是一个好习惯。

所以我为这两个表创建了两个 DAO 并做了我的 CRUD(创建, 读取、更新、删除) 操作并使用一项服务调用 摊位。

为了有效起见,我Autowired 会话工厂。否则,当它尝试执行任何 CRUD 操作时,它每次都会创建一个新的会话工厂,这会消耗大量时间和资源。

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 2021-10-22
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2012-01-02
    • 1970-01-01
    • 2015-06-29
    相关资源
    最近更新 更多