PDA

View Full Version : error in easy hibernate sample!



pro_mvb
یک شنبه 05 شهریور 1391, 13:48 عصر
سلام
من یک کد ساده هایبرنت زدم بیلد میشه اما موقع اجرا اررور میده!

run:
Aug 27, 2012 2:05:05 PM org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.5
Aug 27, 2012 2:05:05 PM org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
Aug 27, 2012 2:05:05 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
Aug 27, 2012 2:05:05 PM org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
Aug 27, 2012 2:05:05 PM org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
Aug 27, 2012 2:05:05 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
Aug 27, 2012 2:05:05 PM org.hibernate.util.XMLHelper$ErrorLogger error
SEVERE: Error parsing XML: /hibernate.cfg.xml(12) The content of element type "hibernate-configuration" must match "(session-factory,security?)".
Exception in thread "main" org.hibernate.MappingException: invalid configuration
at org.hibernate.cfg.Configuration.doConfigure(Config uration.java:1487)
at org.hibernate.cfg.Configuration.configure(Configur ation.java:1428)
at org.hibernate.cfg.Configuration.configure(Configur ation.java:1414)
at javaapplication1.DAO.getSession(DAO.java:32)
at javaapplication1.DAO.insert(DAO.java:13)
at javaapplication1.Demo.main(Demo.java:13)
Caused by: org.xml.sax.SAXParseException; lineNumber: 12; columnNumber: 27; The content of element type "hibernate-configuration" must match "(session-factory,security?)".
at com.sun.org.apache.xerces.internal.util.ErrorHandl erWrapper.createSAXParseException(ErrorHandlerWrap per.java:198)
at com.sun.org.apache.xerces.internal.util.ErrorHandl erWrapper.error(ErrorHandlerWrapper.java:134)
at com.sun.org.apache.xerces.internal.impl.XMLErrorRe porter.reportError(XMLErrorReporter.java:437)
at com.sun.org.apache.xerces.internal.impl.XMLErrorRe porter.reportError(XMLErrorReporter.java:368)
at com.sun.org.apache.xerces.internal.impl.XMLErrorRe porter.reportError(XMLErrorReporter.java:325)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTD Validator.handleEndElement(XMLDTDValidator.java:19 94)
at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTD Validator.endElement(XMLDTDValidator.java:879)
at com.sun.org.apache.xerces.internal.impl.XMLDocumen tFragmentScannerImpl.scanEndElement(XMLDocumentFra gmentScannerImpl.java:1741)
at com.sun.org.apache.xerces.internal.impl.XMLDocumen tFragmentScannerImpl$FragmentContentDriver.next(XM LDocumentFragmentScannerImpl.java:2898)
at com.sun.org.apache.xerces.internal.impl.XMLDocumen tScannerImpl.next(XMLDocumentScannerImpl.java:607)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocum entScannerImpl.next(XMLNSDocumentScannerImpl.java: 116)
at com.sun.org.apache.xerces.internal.impl.XMLDocumen tFragmentScannerImpl.scanDocument(XMLDocumentFragm entScannerImpl.java:488)
at com.sun.org.apache.xerces.internal.parsers.XML11Co nfiguration.parse(XML11Configuration.java:835)
at com.sun.org.apache.xerces.internal.parsers.XML11Co nfiguration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLPars er.parse(XMLParser.java:123)
at com.sun.org.apache.xerces.internal.parsers.Abstrac tSAXParser.parse(AbstractSAXParser.java:1210)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserI mpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
at org.dom4j.io.SAXReader.read(SAXReader.java:465)
at org.hibernate.cfg.Configuration.doConfigure(Config uration.java:1484)
... 5 more
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)



اینم کدم:
کلاس dao:


package javaapplication1;

import org.hibernate.*;
import org.hibernate.cfg.*;


public class DAO {

public void insert(Entity ent){
Session session=getSession();
Transaction tx= session.beginTransaction();
session.save(ent);
tx.commit();
session.close();

}

public Session getSession(){
Configuration conf=new Configuration();
conf.configure();
conf.addClass(Entity.class);
SessionFactory sesfact= conf.buildSessionFactory();
Session session = sesfact.openSession();
return session;
}

}



کلاس Demo:


package javaapplication1;

public class Demo {
public static void main(String args[]){
DAO jav=new DAO();
Entity ent =new Entity();
ent.setEmail("mostafa@yahoo.com");
ent.setId(1);
ent.setLastname("bahmani");
ent.setName("mosio");

jav.insert(ent);
}





}
:افسرده::افسرده::عصبانی++:

spiderman200700
یک شنبه 05 شهریور 1391, 18:44 عصر
سلام.
کلاس Entity و محتویان فایل Entity.hbm.xml و محتیات فایل hibernate.cfg.xml رو هم بذار تا انشاا... مشکل رو پیدا کنیم.

pro_mvb
یک شنبه 05 شهریور 1391, 23:08 عصر
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mysql</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
</session-factory>
<mapping resource="hibernate.hbm.xml"/>
</hibernate-configuration>





<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<Class name="JavaApplication1" table="email">
<id column="ID" name="ID" type="integer"></id>
<property column="name" name="name" type="string"/>
<property column="lasatname" name="lastname" type="string"/>
<property column="email" name="email" type="string"/>

</Class>

</hibernate-mapping>





package javaapplication1;


public class Entity {
private int id;
private String name,lastname,email;

public String getEmail() {
return email;
}

public int getId() {
return id;
}

public String getLastname() {
return lastname;
}

public String getName() {
return name;
}

public void setEmail(String email) {
this.email = email;
}

public void setId(int id) {
this.id = id;
}

public void setLastname(String lastname) {
this.lastname = lastname;
}

public void setName(String name) {
this.name = name;
}


}

Ehsan rashydy
دوشنبه 06 شهریور 1391, 10:16 صبح
فک کنم مشکل تو فایل hibernate.cfg.xml است.

شما باید خط 11 رو ببری داخل تگ <session-factory>!

اگه به فایل dtd مربوط به hibernate.cfg.xml مراجعه کنی، یه جا گفته:

<!ELEMENT session-factory (property*, mapping*, (class-cache|collection-cache)*, event*, listener*)>

این یعنی تگهای <mapping>و <property> حتما باید داخل تگ <session-factory> باشن!

موفق باشید!

pro_mvb
دوشنبه 06 شهریور 1391, 11:42 صبح
ممنون اما بازم اررور داد و اما این بار :

run:
Aug 28, 2012 12:00:47 PM org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.5
Aug 28, 2012 12:00:47 PM org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
Aug 28, 2012 12:00:47 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
Aug 28, 2012 12:00:47 PM org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
Aug 28, 2012 12:00:47 PM org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
Aug 28, 2012 12:00:47 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
Aug 28, 2012 12:00:47 PM org.hibernate.cfg.Configuration addResource
INFO: Reading mappings from resource : hibernate.hbm.xml
Exception in thread "main" org.hibernate.MappingNotFoundException: resource: hibernate.hbm.xml not found
at org.hibernate.cfg.Configuration.addResource(Config uration.java:563)
at org.hibernate.cfg.Configuration.parseMappingElemen t(Configuration.java:1587)
at org.hibernate.cfg.Configuration.parseSessionFactor y(Configuration.java:1555)
at org.hibernate.cfg.Configuration.doConfigure(Config uration.java:1534)
at org.hibernate.cfg.Configuration.doConfigure(Config uration.java:1508)
at org.hibernate.cfg.Configuration.configure(Configur ation.java:1428)
at org.hibernate.cfg.Configuration.configure(Configur ation.java:1414)
at javaapplication1.DAO.getSession(DAO.java:21)
at javaapplication1.DAO.insert(DAO.java:11)
at javaapplication1.Demo.main(Demo.java:13)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)


ظاهرا میگه Mapping رو یعنی فایل Hbm رو پیدا نمیکنه درحالی که این فایل ور دل کلاس ها نشسته!

spiderman200700
دوشنبه 06 شهریور 1391, 13:35 عصر
اول اینکه در hibernate.hbm.xml این خط رو تغییر بده و اینجوری بنویس:
<Class name="JavaApplication1.Entity" table="email">

بعد توی hibernate.cfg.xml باید آدرس hibernate.hbm.xml رو همراه با پوشه هاش بدی. مثلا اینطوری:
<mapping resource="JavaApplication1/hibernate.hbm.xml"/>

در ضمن اسم فایل hibernate.hbm.xml رو به Entity.hbm.xml تغییر بدی بهتره.

این کارا رو بکن. امیدوارم درست بشه.
هر خطایی پش اومد اینجا بذار که ببینینم.

pro_mvb
دوشنبه 06 شهریور 1391, 13:47 عصر
خوب من اینکار روهم انجام دادم و یه حرکت دیگه ای هم که زدم فایل cfg.xml که بیرون از پک javaapplication1 بود رو به داخل پک انتقال دادم ، زمانی که بیرون از این پک بود در یک پکی به این نام وحالت بود<defualt packa>

در کل بعد از انتقالش به داخل پیکج و قرار گرفتنش کنار بقیه کلاس ها و hbm فایل ، نوبت به اجرای برنامه رسید که موقع اجرا باز اروور داد:


run:
Aug 28, 2012 2:10:26 PM org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.5
Aug 28, 2012 2:10:26 PM org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
Aug 28, 2012 2:10:26 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
Aug 28, 2012 2:10:26 PM org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
Aug 28, 2012 2:10:26 PM org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
Aug 28, 2012 2:10:26 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
Exception in thread "main" org.hibernate.HibernateException: /hibernate.cfg.xml not found
at org.hibernate.util.ConfigHelper.getResourceAsStrea m(ConfigHelper.java:147)
at org.hibernate.cfg.Configuration.getConfigurationIn putStream(Configuration.java:1405)
at org.hibernate.cfg.Configuration.configure(Configur ation.java:1427)
at org.hibernate.cfg.Configuration.configure(Configur ation.java:1414)
at javaapplication1.DAO.getSession(DAO.java:21)
at javaapplication1.DAO.insert(DAO.java:11)
at javaapplication1.Demo.main(Demo.java:13)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

pro_mvb
دوشنبه 06 شهریور 1391, 13:51 عصر
من فایل project رو زیپ کردم شاید اینجوری براتون راحتر باشه!:لبخندساده:

spiderman200700
دوشنبه 06 شهریور 1391, 15:22 عصر
خدمت شما!
اشتباهات ریز زیاد داشتی مثلا class رو Class نوشته بودی. یا lastname توی یه جا lastname نوشته بودی یه جای دیگه lasatname نوشته بودی.
الآن توی دیتابیس باید lasatname داشته باشی تا برنامه درست کار کنه، نه lastname
خودت یه مقایسه ای انجام بدی اشکالاتت رو میفهمی.
پسور دیتابیس رو root دادی. دقت کن که واقعا پسورد root باشه.
موفق باشی

pro_mvb
دوشنبه 06 شهریور 1391, 17:45 عصر
ممنون داداش اما زدی نا امیدمون کردی که شاید برای تو فهمیدن کدی که زدی آسون باشه ولی برای منه که اولین سمپلم هست فکر نکنم اینطوری باشه! شما اصلا اومدی یک کلاس جدید تعریف کردی نحوه صدا کردذن متد هات برای گرفتن sessio و برقراری رابطه با دیتبایس هم فرق داره درسته که دارن یک کارو انجام میدن ولی خوب من هنوز اونطوری نیستم که اینارو انالیر کنم. من هدفم پیدا کردن مشکل در کد خودم بود مثلا مثل این lasatname که فرمودین. راستی من کلاس هامو خودم ننوشتم ککه جایی بزرگ کوچیک شده باشه نت بینز ساختتش!
در کل ممنون از زحمتت اما کد من هنوز مشکل داره! بهتر بود بدون تغییر دادن کد به سبک خودتون مشکل کد من رو پیدا می کردین.

منتظر راهنمایی هاتون هستم.

اینم آخرین اررورم بعد از یه تغیرات اسمی :

run:
Aug 28, 2012 6:22:02 PM org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.5
Aug 28, 2012 6:22:02 PM org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
Aug 28, 2012 6:22:02 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
Aug 28, 2012 6:22:02 PM org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
Aug 28, 2012 6:22:02 PM org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
Aug 28, 2012 6:22:02 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
Exception in thread "main" org.hibernate.HibernateException: /hibernate.cfg.xml not found
at org.hibernate.util.ConfigHelper.getResourceAsStrea m(ConfigHelper.java:147)
at org.hibernate.cfg.Configuration.getConfigurationIn putStream(Configuration.java:1405)
at org.hibernate.cfg.Configuration.configure(Configur ation.java:1427)
at org.hibernate.cfg.Configuration.configure(Configur ation.java:1414)
at javaapplication1.DAO.getSession(DAO.java:34)
at javaapplication1.DAO.insert(DAO.java:11)
at javaapplication1.Demo.main(Demo.java:13)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

spiderman200700
دوشنبه 06 شهریور 1391, 18:34 عصر
همونطور که گفتم کدت ایراد داشت و من با ایجاد اون تغییرات درستش کردم.
حالا اگه مشکلت کلاسیه که اضافه کردم، اون کلاسو حذف کن و کلاس DAO رو اینطوری بنویس:
package javaapplication1;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class DAO {

public void insert(Entity ent) {
Session session = getSession();
session.beginTransaction();
session.save(ent);
session.getTransaction().commit();
session.close();

}

public Session getSession() {
Configuration conf = new Configuration();
SessionFactory sesfact = conf.configure().buildSessionFactory();
Session session = sesfact.openSession();
return session;
}
}

این دقیقا همون کد خودته فقط یه خطش حذف شده.

به کلاس Entity هم فقط یه کانسترکتور اضافه کردم . که فکر نکنم دیگه با این مشکلی داشته باشی
به هر حال اگه بازم مشکلی بود یگو.

pro_mvb
دوشنبه 06 شهریور 1391, 22:25 عصر
دیونه شدم !
اررور داد آخه چرا ؟؟؟

run:
Aug 28, 2012 10:29:30 PM org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.5
Aug 28, 2012 10:29:30 PM org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
Aug 28, 2012 10:29:30 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
Aug 28, 2012 10:29:30 PM org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
Aug 28, 2012 10:29:30 PM org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
Aug 28, 2012 10:29:30 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
Exception in thread "main" org.hibernate.HibernateException: /hibernate.cfg.xml not found
at org.hibernate.util.ConfigHelper.getResourceAsStrea m(ConfigHelper.java:147)
at org.hibernate.cfg.Configuration.getConfigurationIn putStream(Configuration.java:1405)
at org.hibernate.cfg.Configuration.configure(Configur ation.java:1427)
at org.hibernate.cfg.Configuration.configure(Configur ation.java:1414)
at javaapplication1.DAO.getSession(DAO.java:45)
at javaapplication1.DAO.insert(DAO.java:16)
at javaapplication1.Demo.main(Demo.java:8)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)


من entity dao demo رو کد های شما قرار دادم اما بازم.... فکر کنم با این جور پیش رفتن عمرا بتونم جایی کار کنم.

spiderman200700
سه شنبه 07 شهریور 1391, 00:10 صبح
اگه Entity.hbm.xml و hibernate.cfg.xml رو هم مثل من بنویسی مشکلی پیش نمیاد.
در ضمن hibernate.cfg.xml باید توی default package باشه.
هایبرنیت اولش واسه همه عذاب آوره ولی بعدش که اولین پروژه رو نوشتی تبدیل به یه تجربه ی لذت بخش میشه.

pro_mvb
سه شنبه 07 شهریور 1391, 00:32 صبح
من hbm رو هم مثل شما نوشتم فقط فایل طcfg رو ندادین!

pro_mvb
سه شنبه 07 شهریور 1391, 00:36 صبح
داداش اوون حل شد الان زدم حل شد ولی اررور دیگه دارم که اله jdbc اینسا انگار فردا صبح میایم میگم
بای

pro_mvb
سه شنبه 07 شهریور 1391, 10:41 صبح
حل شد ! یه مقدار می خوام باش کلنجار برم ببینم چطوریاست . مستر spiderman خیلی لطف کردی دمت گرم.


خوب من کدهای خودمو تیکه تیکه مقایسه کردم و تست کردم فهمیدم مشکل کار زمانی هست که تیکه کد :

conf.addClass(Entity.class)

وجودش باعث میشه ارروری بده که میگه فایل Entity.hbm.xml رو موقع خواندن از mapping resource پیدا نمیکنه . در حقیقت هم نباید پیدا کنه چون اسم فایلش hibernate.hbm.xml هست!

حالا داستان این متد چیه؟ یعنی کارش چیه و چی کار میکنه من بقیه متد هارو میفهمم برای چی هستن و کارشون چیه اما این conf.addClass رو نمیدونم.

بازم دم همتون گرم :قلب::قلب::قلب: ایشالا بعد از هایبرنیت میرم سراغ spring اونجا دیگه فکر کنم کار سخت تر از اینجا باشه:بامزه: