在我的项目中我使用xml(而不是Annotations)将数据库映射到类,我已将两个表映射到一个类,如下所示。
<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 表。这是因为我称之为第1次
b 是一个BookStatistics instansce,它充满了数据
session.saveOrUpdate("BookStatistics", b);
session.saveOrUpdate("BookStatisticsHistory", b);
如果我调用 session.saveOrUpdate(“BookStatisticsHistory”,b) 1st,那么只有另一个表被填充。
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();
有没有办法用单一服务填充这两个表。提前致谢
答案 0 :(得分:0)
您可以使用两个会话来完成此操作。等,
Session session1 = sessionFactory.openSession();
Session session2 = sessionFactory.openSession();
但我认为这不是很好的做法。无论如何,在一个DAO中不需要两个表。这也不是一个好习惯。
所以我为这两个表创建了两个DAO并执行了我的 CRUD(创建, 读取,更新,删除)那里的操作并使用一个服务来调用 展台。
为了有效性,我 自动连接 会话工厂。否则,当它尝试执行任何CRUD操作时,它每次都会创建一个新的会话工厂,这会消耗大量的时间和资源。