На пути к пониманию transaction-type
атрибута persistence.xml
я столкнулся с проблемой / несоответствием между hibernate-core и JPA-hibernate, что выглядит странно.
Я не совсем уверен, является ли это отсутствующей реализацией с JPA hibernate.
Позвольте мне опубликовать сравнение между результатами реализации JPA и гибернационной реализацией той же концепции.
Окружающая среда
- Затмение 3.5.1
- JSE v1.6.0_05
- Hibernate v3.2.3 [для ядра Hibernate]
- Hibernate-EntityManger v3.4.0 [для JPA]
- MySQL DB v5.0
Выпуск
1.Hibernate ядро
package com.expt.hibernate.core;</p>
<pre><code>import java.io.Serializable;
public final class Student implements Serializable {
private int studId;
private String studName;
private String studEmailId;
public Student(final String studName, final String studEmailId) {
this.studName = studName;
this.studEmailId = studEmailId;
}
public int getStudId() {
return this.studId;
}
public String getStudName() {
return this.studName;
}
public String getStudEmailId() {
return this.studEmailId;
}
private void setStudId(int studId) {
this.studId = studId;
}
private void setStudName(String studName) {
this.studName = stuName;
}
private void setStudEmailId(int studEmailId) {
this.studEmailId = studEmailId;
}
}
2. JPA реализация Hibernate
package com.expt.hibernate.jpa;</p>
<pre><code>import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "Student_Info")
public final class Student implements Serializable {
@Id
@GeneratedValue
@Column(name = "STUD_ID", length = 5)
private int studId;
@Column(name = "STUD_NAME", nullable = false, length = 25)
private String studName;
@Column(name = "STUD_EMAIL", nullable = true, length = 30)
private String studEmailId;
public Student(final String studName, final String studEmailId) {
this.studName = studName;
this.studEmailId = studEmailId;
}
public int getStudId() {
return this.studId;
}
public String getStudName() {
return this.studName;
}
public String getStudEmailId() {
return this.studEmailId;
}
}
Кроме того, я предоставил свойства конфигурации БД в связанных hibernate-cfg.xml [in case of hibernate core]
и persistence.xml [in case of JPA (hibernate entity manager)]
.
создать драйвер и выполнить
добавить студента и
запросить список студентов и распечатать их данные.
Тогда проблема возникает при запуске программы драйвера.
Hibernate ядро - вывод
Exception in thread "main" org.hibernate.InstantiationException: No default constructor for entity: com.expt.hibernate.core.Student
at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:84)
at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:100)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.java:351)
at org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:3604)
....</p>
<p>....
Это исключение высвечивается при первом запуске драйвера.
JPA Hibernate - вывод
Первое выполнение драйвера на новой БД обеспечивало следующий вывод.
DEBUG SQL:111 -
insert
into
student.Student_Info
(STUD_EMAIL, STUD_NAME)
values
(?, ?)
17:38:24,229 DEBUG SQL:111 -
select
student0_.STUD_ID as STUD1_0_,
student0_.STUD_EMAIL as STUD2_0_,
student0_.STUD_NAME as STUD3_0_
from
student.Student_Info student0_</p>
<p>student list size ==> 1</p>
<p>1 || Jegan || jegan.k@opensource.com
Второе выполнение драйвера обеспечивало следующий вывод.
DEBUG SQL:111 -
insert
into
student.Student_Info
(STUD_EMAIL, STUD_NAME)
values
(?, ?)
17:40:25,254 DEBUG SQL:111 -
select
student0_.STUD_ID as STUD1_0_,
student0_.STUD_EMAIL as STUD2_0_,
student0_.STUD_NAME as STUD3_0_
from
student.Student_Info student0_</p>
<p>Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.InstantiationException: No default constructor for entity: com.expt.hibernate.jpa.Student
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:614)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:76)
at driver.StudentDriver.main(StudentDriver.java:43)
Caused by: org.hibernate.InstantiationException: No default constructor for entity: com.expt.hibernate.jpa.Student
....</p>
<p>....
Может ли кто-нибудь сообщить мне, если вы столкнулись с таким несоответствием?
Кроме того, кто-нибудь может сообщить мне, если проблема заключается в отсутствующей реализации в JPA-Hibernate?
~ Jegan