这是我的配置。
它说没有找到这样的方法,但在Java文档和我的Util文件中都存在。我在某处读到了它与hibernate 3和4的交叉配置。不能得到这个......
<!DOCTYPE hibernate-configuration SYSTEM
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost/datacenter</property>
<property name="connection.username">root</property>
<property name="connection.password">admin</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="current_session_context_class">thread</property>
<property name="show_MySql">TRUE</property>
<property name="format_sql">TRUE</property>
<property name="jboss.as.jpa.providerModule">hibernate3-bundled</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
<!-- List of annotated classes-->
<!-- Associations -->
<!-- One to one -->
<mapping class="Emp_Timecard" />
<mapping class="maindoor" />
<mapping class="serverroom" />
<mapping class="timesheet" />
<mapping class="hibernatepojos.Resource_list"/>
</session-factory>
</hibernate-configuration>
这是我的Util文件:
package hibernatedata;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
public class HibernateUtil {
private static SessionFactory sessionFactory;
private static AnnotationConfiguration config1;
static {
config1 = (AnnotationConfiguration) new AnnotationConfiguration()
.configure("hibernate.cfg.xml");
}
public static SessionFactory getSessionFactory() {
if (sessionFactory == null) {
createSessionfactory();
}
return sessionFactory;
}
private static void createSessionfactory() {
sessionFactory = config1.buildSessionFactory();
}
public static Session openSession() {
return getSessionFactory().getCurrentSession();
}
public static void closeSessionFactory() {
// getSessionFactory().close();
}
public static void save(Object o) {
Session s = openSession();
System.out.println("kejrkvg");
s.beginTransaction();
s.save(o);
s.getTransaction().commit();
// s.close();
// s.clear();
if (s.isOpen()) {
s.close();
}
closeSessionFactory();
}
public static void delete(Object o) {
Session s = openSession();
s.beginTransaction();
s.delete(o);
s.getTransaction().commit();
// s.close();
}
public static <T> T load(Class<T> clazz, int id) {
Session s = openSession();
s.beginTransaction();
T t = clazz.cast(s.load(clazz, id));
// s.getTransaction().commit();
return t;
}
public static void update1(Object o) {
Session s = openSession();
s.beginTransaction();
s.update(o);
s.getTransaction().commit();
// s.close();
}
}
答案 0 :(得分:1)
它说没有找到这样的方法,但是在Java文档中做得很好
错误是在运行时生成的,而不是在编译代码时生成的。所以看起来你的一些代码是针对一个版本的代码编译的,但是会再次执行一个不同的,可能是旧的版本。完整堆栈跟踪将包含有关不兼容性所在位置的更多信息。
如果有疑问,可以使用javap
来查看从给定系统上的给定类路径加载的类是否实际包含该方法。如果您希望使用的类路径不提供该方法,则可能需要在该路径中安装正确版本的库。另一方面,如果它看起来也是正确的,那么这是一个很好的迹象,表明一个不同的类被加载而不是你期望的那个。然后,您可以添加调试代码以确定用于加载该类的类加载器,以查看它实际来自何处。
答案 1 :(得分:0)
问题java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession()Lorg/hibernate/classic/Session的已接受答案也可能提供一些见解 - &#34;在Hibernate 3.6中,SessionFactory.openSession不再返回org.hibernate.classic.Session,而是返回一个org.hibernate.Session。这是一个破坏客户端代码的重构器。&#34;