在DAO中有一个值来自Java枚举的字段通常很有用。 一个典型的例子是一个loginDAO,其中通常有一个字段表示用户为“NORMAL”或“ADMIN”。 在Hibernate中,我将使用以下两个对象以(半)types安全的方式表示这种关系: class User { String username; String passwd; UserType type; } class UserType { private enum Type {ADMIN, NORMAL}; private String type; //Setters/Getters for Hibernate public void setType(String type); public String getType(); //Setters/Getters for user public void setUserType(UserType.Type t); public UserType.Type getUserType(); public static UserType fromType(UserType.Type t); } 这是有效的,但是我发现UserType类不够用,需要太多的官僚作风来存储一些值。 理想情况下,Hibernate应直接支持枚举字段,并创build一个额外的表来存储枚举值。 我的问题是:是否有任何方法直接映射在Hibernate的枚举类? 如果没有,我的模式代表枚举足够好还是我错过了什么? 人们使用什么其他模式?
我得到以下hibernate错误。 我能够确定导致问题的function。 不幸的是在函数中有几个数据库调用。 自从hibernate在事务结束时刷新会话后,我无法find导致问题的行。 下面提到的hibernate错误看起来像一个普遍的错误。 它甚至没有提到哪个Bean导致问题。 任何熟悉这个冬眠错误的人? org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1 at org.hibernate.jdbc.BatchingBatcher.checkRowCount(BatchingBatcher.java:93) at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:79) at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:584) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransacti onManager.java:500) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManag er.java:473) at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(Transaction […]
如何在Hibernate字段中设置默认值?
我有一些关于在JSP Web应用程序中使用Hibernate的问题。 hibernate.current_session_context_class的值应该是多less? 那么,应该使用以下哪个语句? 为什么? Session s = HibernateUtil.getSessionFactory().openSession(); Session s = HibernateUtil.getSessionFactory().getCurrentSession() 最后,哪一个更好?“每个Web应用一个会话”或“每个请求一个会话”?
我有一种情况,我需要将分离的对象重新挂接到一个hibernate会话,虽然同一个标识的对象可能已经存在于会话中,这会导致错误。 现在,我可以做两件事之一。 getHibernateTemplate().update( obj )当且仅当一个对象在hibernate会话中不存在时,它才起作用。 当我稍后需要时,会抛出exception,说明具有给定标识符的对象已经存在于会话中。 getHibernateTemplate().merge( obj )当且仅当hibernate会话中存在一个对象时,它才起作用。 当我需要对象在会话中后,如果我使用这个exception抛出。 鉴于这两种情况,我怎样才能将会话一般附加到对象? 我不想用exception来控制这个问题解决scheme的stream程,因为必须有更优雅的解决scheme。
我试图运行一个春季启动应用程序使用hibernate通过spring-jpa,但我得到这个错误: Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.determineDialect(DialectFactoryImpl.java:104) at org.hibernate.engine.jdbc.dialect.internal.DialectFactoryImpl.buildDialect(DialectFactoryImpl.java:71) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:205) at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:111) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:234) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206) at org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1885) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1843) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843) at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398) at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842) at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152) at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:336) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1613) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1550) … 21 more 我的pom.xml文件是这样的: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> […]
有谁知道如何获得由Spring Boot创build的Hibernate SessionFactory?
我是冬眠和spring的初学者。 我已经了解了hibernate事务划分(至less我是这么认为的)。 但是在编写这样几个方法之后: sessionFactory.getCurrentSession().beginTransaction(); //do something here sessionFactory.getCurrentSession().endTransaction(); 我开始想避免它,并希望在我的方法之外自动完成,这样我只写“//在这里做某事”部分。 我已经阅读了关于TransactionProxyFactoryBean,并认为XMLconfiguration是非常长的,必须重复每个类我想使交易,所以如果可能我要避免使用它。 我试图使用@Transactional,但它根本不工作。 我在我的applicationContext.xml中有这些行 <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:hibernate.cfg.xml" /> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="dataSource" ref="dataSource" /> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> 我已经用@Transactional标记了我的服务类,但是我总是得到“xxx没有活动事务无效”。 这是一个示例代码给我一个错误(在unit testingbtw中运行): @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:applicationContext.xml" }) @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true) public […]
我用spring + hibernate创build了一个应用程序,但是我总是得到这个错误。 这是我的第一个应用与hibernate,我读了一些指南,但我不能解决这个问题。 我在哪里做错了? 这是我的应用程序的代码 ott 05, 2014 4:03:06 PM org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh Informazioni: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@1eab16b: startup date [Sun Oct 05 16:03:06 CEST 2014]; root of context hierarchy ott 05, 2014 4:03:06 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions Informazioni: Loading XML bean definitions from class path resource [springConfig.xml] ott 05, 2014 4:03:08 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit> INFO: HCANN000001: Hibernate […]
无参构造函数是一个需求(像Hibernate这样的工具在这个构造函数中使用reflection来实例化对象)。 我得到了这个手势波形的答案,但有人可以进一步解释吗? 谢谢