Hibernate在SessionFactory创建期间抛出此异常:
org.hibernate.loader.MultipleBagFetchException:无法同时获取多个行李
这是我的测试用例:
Parent.java
@Entity
public Parent {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
// @IndexColumn(name="INDEX_COL") if I had this the problem solve but I retrieve more children than I have, one child is null.
private List<Child> children;
}
Run Code Online (Sandbox Code Playgroud)
Child.java
@Entity
public Child {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@ManyToOne
private Parent parent;
}
Run Code Online (Sandbox Code Playgroud)
这个问题怎么样?我能做什么?
编辑
好吧,我遇到的问题是另一个"父"实体在我父母的内部,我的真实行为是这样的:
Parent.java
@Entity
public Parent {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@ManyToOne
private AntoherParent anotherParent;
@OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
private List<Child> children;
}
Run Code Online (Sandbox Code Playgroud)
AnotherParent.java
@Entity …Run Code Online (Sandbox Code Playgroud) 如何使用H2数据库的集成管理前端?
对于诸如create table,alter table,add column等操作.
我在一些文章中读到DAO对于hibernate并不是强制性的,它的实现是"依赖于",换句话说,我们可以在ORM与DAO模式之间进行选择.
好吧,我们假设我不想使用DAO模式,所以我只使用会话CRUD和hibernate提供的查询操作(我的ORM).
特别是对于"搜索"和"查找"查询来说,总是重写它们是不正确的,所以合理的想法就是把它们放到一个类中.
但是这个类是一个简单的DAO,没有DAO模式和DAOFactory的所有实现,只是DAO的轻量级实现.所以,重点是我们总是需要一个DAO,选择是重DAO实现还是轻量级DAO实现?
我说的是错的?
编辑 我的另一个问题是放置dao交互,例如我必须登录用户并写入登录日志(我知道无用的例子......)
所以在DAO模式中,我有所有泛型dao实现,DAOFactory,最后是UserHibernateDAO和LogHibernateDAO.登录操作是一种业务方法:
private void login(String username, String password){
daoFactory.beginTransaction();
UserDAO userDao=daoFactory.HIBERNATE.getUserDao();
LogDAO logDao=daoFactory.HIBERNATE.getLogDao();
if(userDao.checkAccount(username, password){
User user=userDao.findByAccount(username, password);
logDao.save(new Log("log-in", user);
}
daoFactory.commit();
}
Run Code Online (Sandbox Code Playgroud)
这合理吗?我可以用这种方式使用dao吗?如果我想要处理异常,那么更好的地方就是业务逻辑?
EDIT2 让我们假设使用DAO模式,这样做的主要原因是能够在tecnhology(ORM-> JDBC等等)之间切换,一切都很好,但是我可以在哪里处理hibernate会话和事务?我不能把它放到DAO中,这是anty模式,我不能把它放到服务层,因为在hipohtetycal开关我必须删除所有这个交易(因为其他技术可能不会使用它们).
我有一个双监视器配置,我想在特定的监视器中运行我的GUI,如果找到它.我试图创建我的JFrame窗口传递GraphicConfiguration我的屏幕设备的对象,但它不起作用,框架仍显示在主屏幕上.
如何设置必须显示框架的屏幕?
我测试我的DAO和服务没有问题,但是当我测试INSERTs或UPDATEs时我想回滚事务而不影响我的数据库.
我@Transactional在我的服务中使用来管理交易.我想知道,是否可以知道某个事务是否正常,但是回滚它以防止更改数据库?
这是我的测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:/META-INF/spring.cfg.xml")
@TransactionConfiguration(defaultRollback=true)
public class MyServiceTest extends AbstractJUnit38SpringContextTests {
@Autowired
private MyService myService;
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Test
public void testInsert(){
long id = myService.addPerson( "JUNIT" );
assertNotNull( id );
if( id < 1 ){
fail();
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是此测试将失败,因为事务已回滚,但插入正常!如果我删除@TransactionConfiguration(defaultRollback=true)了测试通过但是新记录将被插入到数据库中.
@Test
@Transactional
@Rollback(true)
public void testInsert(){
long id = myService.addPerson( "JUNIT" );
assertNotNull(id); …Run Code Online (Sandbox Code Playgroud) 以下哪个数据库最适合大型桌面应用程序:Firebird,JavaDB,hsqldb?我需要性能,易用性和完全免费的许可证.
我正在尝试使用-Dsun.java2d.dpiaware=false参数运行Java应用程序,但没有任何反应.
我希望有一个模糊的用户界面,但图标和字体的大小正常,似乎这个标志不起作用.
我在Windows 8.1上使用JDK 1.8.0_45.
我发现了这个错误https://bugs.openjdk.java.net/browse/JDK-8080153但我不明白如何解决它.
我有一个属性为"quantity"的实体,该值不是表字段,而是使用hql查询动态计算的.
那么,有可能在我的实体中添加这个值,并在我加载实体时让hibernate计算它吗?
我使用spring + hibernate用于桌面应用程序.
我正在尝试使用分层实现来构建它,所以我有:
GUI层 - 调用 - >服务层 - 调用 - > DAO层
一个小例子来更好地解释我的情况:
// In GUI layer
private void actionPerformed(ActionEvent evt){
addUser();
}
private void addUser(){
// Check gui validation for user inputs
if(inputIsValid()){
String username=nameText.getText();
String pass=passText.getText();
//Now call service layer
userService.createUser(username, pass);
// Now here i want to show a message to user like
// "Operation successful" or "Operation failed"
// or more sofisticated message like "User with same name already exists"
}
}
// Service …Run Code Online (Sandbox Code Playgroud) 我有一个Hibernate的DAO,在根据Hibernate的API 3和春天3.x中,我用一个简单的sessionFactory和NOT的HibernateDaoSupport+ getHibernateTemplate()-我希望这是一个不错的选择-
现在我的目标是sessionFactory使用注释自动装入我的DAO.
我spring.xml有这个:
<context:component-scan base-package="data" />
Run Code Online (Sandbox Code Playgroud)
内部数据包我有我所有的DAO和服务类.
这很简单HibernateDao:
@Repository
public class PersonHDAO implements PersonDAO {
private SessionFactory sessionFactory;
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public List<Person> findAll(){
return sessionFactory.getCurrentSession().createQuery("bla bla").list();
}
}
Run Code Online (Sandbox Code Playgroud)
我在spring.xml加载过程中没有错误,但sessionFactory仍然是null.
我该怎么办?
编辑
这是我sessionFactory在spring.xml以下方面的声明:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context" …Run Code Online (Sandbox Code Playgroud)