结果列表很完美,但getResultSize()不正确.
我已经敲了一些代码来说明.
Criteria criteria2 = this.getSession().createCriteria(Film.class);
Criterion genre = Restrictions.eq("genreAlias.genreName", details.getSearch().getGenreName());
criteria2.createAlias("genres", "genreAlias", CriteriaSpecification.INNER_JOIN);
criteria2.add(genre);
criteria2.setMaxResults(details.getMaxRows())
.setFirstResult(details.getStartResult());
FullTextEntityManager fullTextEntityManager = org.hibernate.search.jpa.Search.createFullTextEntityManager(entityManager);
org.apache.lucene.queryParser.QueryParser parser2 = new QueryParser("title", new StopAnalyzer() );
org.apache.lucene.search.Query luceneQuery2 = parser2.parse( "title:"+details.getSearch()");
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery( luceneQuery2, Film.class);
fullTextQuery.setCriteriaQuery(criteria2);
fullTextQuery.getResultList()); // Returns the correctly filtered list
fullTextQuery.getResultSize()); // Returns the retsult size without the genre resrtiction
Run Code Online (Sandbox Code Playgroud) 我已经看到它写了Hibernate二级缓存仅在调用load方法时使用.我无法找到关于它是否在调用时使用的任何结论性答案get,我们已经集成的GenericDAO项目主要使用.
是否在调用时使用了二级缓存org.hibernate.Session.get(Class clazz, Serializable id)?
我有一个包含以下成员属性的实体:
@Id
protected String id;
@ElementCollection(targetClass = String.class)
@MapKeyClass(String.class)
protected Map<String, String> data = new HashMap<String,String>();
Run Code Online (Sandbox Code Playgroud)
这映射到两个表,一个ENTITY表和一个ENTITY_DATA表,其中包含HashMap中每个元素的行.它将HashMap中的值映射为VARCHAR(256),我需要它为VARCHAR(1024).可以这样做吗?我无法在ElementCollection或MapKeyClass注释中找到允许这样做的任何内容.
我在桌子上做了一个"简单",它给出了这个错误.搜索网络没有帮助.
我认为它使用序列作为我的主键的源来连接到我.
你能帮忙吗?谢谢
代码我正在尝试运行(我突出显示了抛出错误的部分)
EventInstance eventInstance = (EventInstance) sessionFactory.getCurrentSession().get(EventInstance.class, userEventRegistration.getEventInstance().getInstanceId());
Student student = (Student) sessionFactory.getCurrentSession().get(Student.class, userEventRegistration.getStudent().getStudentId());
EventRegistration eventRegistration = new EventRegistration();
if (student == null) {
student = new Student();
student.setStudentId(userEventRegistration.getStudent().getStudentId());
}
student.setFamilyName(userEventRegistration.getStudent().getFamilyName());
student.setGivenName(userEventRegistration.getStudent().getGivenName());
student.setGender(userEventRegistration.getStudent().getGender());
student.setEmail(userEventRegistration.getStudent().getEmail());
student.setHomeCountry(userEventRegistration.getStudent().getHomeCountry());
student.setCourse(userEventRegistration.getStudent().getCourse());
student.setAccomodationName(userEventRegistration.getStudent().getAccomodationName());
student.setAddress(userEventRegistration.getStudent().getAddress());
student.setAddressCity(userEventRegistration.getStudent().getAddressCity());
student.setContactPhone(userEventRegistration.getStudent().getContactPhone());
student.setContactDetailsStatus(userEventRegistration.getStudent().getContactDetailsStatus());
student.setContactDetailsDate(userEventRegistration.getStudent().getContactDetailsDate());
student.setScholarships(userEventRegistration.getStudent().getScholarships());
student.setDietaryRestrictions(userEventRegistration.getStudent().getDietaryRestrictions());
student.setStudentComments(userEventRegistration.getStudent().getStudentComments());
student.setInternalComments(userEventRegistration.getStudent().getInternalComments());
eventRegistration.setEventInstance(eventInstance);
eventRegistration.setStudent(student);
eventRegistration.setAttended(userEventRegistration.getAttended());
eventRegistration.setSubmitDateTime(new Date());
eventRegistration.setAdditionalInfo(userEventRegistration.getAdditionalInfo());
eventRegistration.setNumberAttending(userEventRegistration.getNumberAttending());
eventRegistration.setArchiveDate(userEventRegistration.getArchiveDate());
**sessionFactory.getCurrentSession().save(eventRegistration);**
sessionFactory.getCurrentSession().getTransaction().commit();
Run Code Online (Sandbox Code Playgroud)
hibernate映射
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.myapps.issu.models.database.Event" table="events">
<id name="eventId" column="event_id" type="integer" />
<property name="eventName" …Run Code Online (Sandbox Code Playgroud) 我正在研究如何将Spring Framework与Hibernate集成以创建我的DAO对象
我在从CRUD操作集执行读取操作时遇到一些问题.
我有这个实现我的DAO对象的类:
package org.andrea.myexample.HibernateOnSpring.dao;
import org.andrea.myexample.HibernateOnSpring.entity.Person;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.transaction.annotation.Transactional;
public class PersonDAOImpl implements PersonDAO{
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
// Metodo che inserisce un nuovo record nella tabella person
@Transactional(readOnly=false)
public void addPerson(Person p) {
Session session = sessionFactory.openSession();
session.save(p);
session.close();
}
/* Metodo che recupera un record, rappresentante uno studente, avente uno
* specifico id dalla tabella.
*
* @param L'id dello studente
* @see org.andrea.myexample.myJdbcSpringExample.StudentDAO#getStudent(java.lang.Integer)
*/ …Run Code Online (Sandbox Code Playgroud) 我发现我的hibernate程序很奇怪.这是我的代码
public Set<AnotherClass> getAnotherClassSetsFromSomeClass() {
Session session = HIbernateUtil.getSessionFactory().openSession();
Transaction trans = session.beginTransaction();
SomeClass sc = (SomeClass)session.get(SomeClass.class,"classId");
trans.commit();
session.close;
return sc.getAnotherClassSet();
}
Run Code Online (Sandbox Code Playgroud)
如果我在Java控制台上运行它,这段代码看起来很好.
如果我使用它一个Web应用程序(JSF),我收到此错误
懒得初始化 - 没有会话或会话被关闭
它具有一对多关系(一个SomeClass有许多AnotherClass)
异常消息指向返回sc.getAnotherClassSet()为空指针.我确信我的数据库中有这些数据.
好吧,我发现,如果我添加System.out.println(sc.getAnotherClassSet())berfore return sc.getAnotherClassSet()我的代码工作正常.
知道发生了什么事吗?谢谢.
我是第一次在项目中使用Hibernate(4.2.3).我试图让它连接到H2嵌入式(本地)数据库,并拥有h2-1.3.173.jar类路径以及所有Hibernate JAR.我在日志输出中收到来自Hibernate的一些令人不安的错误消息,这让我想知道我是不是正确配置了Hibernate.这是我在日志中看到的输出:
604 [main] INFO org.hibernate.annotations.common.Version - HCANN000001: Hibernate Commons Annotations {4.0.2.Final}
707 [main] INFO org.hibernate.Version - HHH000412: Hibernate Core {4.2.3.Final}
769 [main] INFO org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found
771 [main] INFO org.hibernate.cfg.Environment - HHH000021: Bytecode provider name : javassist
2192 [main] INFO org.hibernate.cfg.Configuration - HHH000043: Configuring from resource: hibernate.cfg.xml
2192 [main] INFO org.hibernate.cfg.Configuration - HHH000040: Configuration resource: hibernate.cfg.xml
2835 [main] INFO org.hibernate.cfg.Configuration - HHH000041: Configured SessionFactory: null
3313 [main] INFO org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl - HHH000402: Using Hibernate built-in …Run Code Online (Sandbox Code Playgroud) 我正在尝试将spring与hibernate集成,但是捕获NamingException:Context是只读的
堆栈跟踪
WARNING: Could not bind factory to JNDI
javax.naming.NamingException: Context is read only
at org.apache.naming.NamingContext.checkWritable(NamingContext.java:903)
at org.apache.naming.NamingContext.createSubcontext(NamingContext.java:517)
at org.apache.naming.NamingContext.createSubcontext(NamingContext.java:538)
at org.apache.naming.SelectorContext.createSubcontext(SelectorContext.java:422)
at javax.naming.InitialContext.createSubcontext(InitialContext.java:464)
at org.hibernate.util.NamingHelper.bind(NamingHelper.java:69)
at org.hibernate.impl.SessionFactoryObjectFactory.addInstance(SessionFactoryObjectFactory.java:90)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:306)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1300)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:855)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:774)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1460)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1398)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:540)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:842)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:416)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:261)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:192)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4350)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553) …Run Code Online (Sandbox Code Playgroud) 我使用JUnit时遇到问题:
Hibernate: SELECT COUNT(0) FROM group
DEBUG - SqlExceptionHelper - user lacks privilege or object not found: GROUP [n/a]
java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: GROUP
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at $Proxy46.executeQuery(Unknown Source)
at org.springframework.jdbc.core.JdbcTemplate$1QueryStatementCallback.doInStatement(JdbcTemplate.java:441)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:396)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:456)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:464)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:472)
at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:477)
at org.springframework.jdbc.core.JdbcTemplate.queryForInt(JdbcTemplate.java:486)
at org.springframework.jdbc.core.simple.SimpleJdbcTemplate.queryForInt(SimpleJdbcTemplate.java:117)
at org.springframework.test.jdbc.SimpleJdbcTestUtils.countRowsInTable(SimpleJdbcTestUtils.java:56)
at org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests.countRowsInTable(AbstractTransactionalJUnit4SpringContextTests.java:115)
at fr.neosoft.neocommunity.dao.group.GroupTest.testSave(GroupTest.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native …Run Code Online (Sandbox Code Playgroud) 使用Google Eclipse插件,我的项目自动在META-INF文件夹中附带两个文件:jdoconfig.xml和persistence.xml.根据https://developers.google.com/appengine/docs/java/datastore/jpa/overview上的说明,我的持久性文件应该包含以下jpa数据存储存储行:
<provider>org.datanucleus.store.appengine.jpa.DatastorePersistenceProvider</provider>
Run Code Online (Sandbox Code Playgroud)
但是当我打开我发现的持久性文件时
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="transactions-optional">
<provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
<properties>
<property name="datanucleus.NontransactionalRead" value="true"/>
<property name="datanucleus.NontransactionalWrite" value="true"/>
<property name="datanucleus.ConnectionURL" value="appengine"/>
</properties>
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)
而jdoconfig.xml文件是
<?xml version="1.0" encoding="utf-8"?>
<jdoconfig xmlns="http://java.sun.com/xml/ns/jdo/jdoconfig"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig">
<persistence-manager-factory name="transactions-optional">
<property name="javax.jdo.PersistenceManagerFactoryClass"
value="org.datanucleus.store.appengine.jdo.DatastoreJDOPersistenceManagerFactory"/>
<property name="javax.jdo.option.ConnectionURL" value="appengine"/>
<property name="javax.jdo.option.NontransactionalRead" value="true"/>
<property name="javax.jdo.option.NontransactionalWrite" value="true"/>
<property name="javax.jdo.option.RetainValues" value="true"/>
<property name="datanucleus.appengine.autoCreateDatastoreTxns" value="true"/>
</persistence-manager-factory>
</jdoconfig>
Run Code Online (Sandbox Code Playgroud)
使用这些默认内容,JPA尚未保存到我的数据存储区.所以我编辑persistence.xml文件看起来像这样
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" …Run Code Online (Sandbox Code Playgroud) hibernate ×9
java ×6
spring ×2
ehcache ×1
jpa ×1
jpa-2.0 ×1
jsf ×1
junit ×1
lazy-loading ×1
spring-mvc ×1