Добрый день всем. Я новичок в Hibernate и пытаюсь написать свое первое приложение с использованием этого фреймворка.
Проблема заключается в следующем, при сохранении сущности в базу функция save() по описанием документации должна возвращать "id" которое присваивается записи в БД, но по какой-то причине у меня всегда 0.
Подскажите пожалуйста, что делать?
Объект сущность package POJO;
import javax.persistence.*;
@Entity
@Table(name = "Employee")
public class Employee {
@Id @GeneratedValue()
@Column(name = "id",unique = true, nullable = false)
private int id;
@Basic
@Column(name = "first_name", nullable = true, length = 20)
private String firstName;
@Basic
@Column(name = "last_name", nullable = true, length = 20)
private String lastName;
@Basic
@Column(name = "salary", nullable = true)
private Integer salary;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Integer getSalary() {
return salary;
}
public void setSalary(Integer salary) {
this.salary = salary;
}
}
Конфигурационный файл Hibernate для сущности Employee
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="POJO.Employee" table="employee" schema="company">
<id name="id">
<column name="id" sql-type="int(11)"/>
</id>
<property name="firstName">
<column name="first_name" sql-type="varchar(20)" length="20" not-null="true"/>
</property>
<property name="lastName">
<column name="last_name" sql-type="varchar(20)" length="20" not-null="true"/>
</property>
<property name="salary">
<column name="salary" sql-type="int(11)" not-null="true"/>
</property>
</class>
</hibernate-mapping>
Класс для управления с CRUD package Service;
import POJO.Employee;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import java.io.Serializable;
import java.util.Iterator;
import java.util.List;
public class ManagementEmployee {
private SessionFactory sessionFactory;
public ManagementEmployee(){
Configuration conf = new
Configuration().addAnnotatedClass(Employee.class).configure();
sessionFactory = conf.buildSessionFactory();
}
/* Method to CREATE an employee in the database */
public Integer addEmployee(String fname, String lname, Integer salary){
Session session = sessionFactory.openSession();
Transaction transaction = null;
Integer employeeID = null;
try{
transaction = session.beginTransaction();
Employee employee = new Employee();
employee.setFirstName(fname);
employee.setLastName(lname);
employee.setSalary(salary);
employeeID = (Integer) session.save(employee);
transaction.commit();
}catch (HibernateException e) {
if (transaction!=null) transaction.rollback();
e.printStackTrace();
}finally {
session.close();
}
return employeeID;
}
/* Method to READ all the employees */
public void listEmployees( ){
Session session = sessionFactory.openSession();
Transaction tx = null;
try{
tx = session.beginTransaction();
List employees = session.createQuery("From Employee").list();
for (Iterator iterator =
employees.iterator(); iterator.hasNext();){
Employee employee = (Employee) iterator.next();
System.out.print("First Name: " + employee.getFirstName());
System.out.print(" Last Name: " + employee.getLastName());
System.out.println(" Salary: " + employee.getSalary());
}
tx.commit();
}catch (HibernateException e) {
if (tx!=null) tx.rollback();
e.printStackTrace();
}finally {
session.close();
}
}
/* Method to UPDATE salary for an employee */
public void updateEmployee(Integer EmployeeID, Integer salary ){
Session session = sessionFactory.openSession();
Transaction tx = null;
try{
tx = session.beginTransaction();
Employee employee = session.get(Employee.class, EmployeeID);
employee.setSalary(salary);
session.update(employee);
tx.commit();
}catch (HibernateException e) {
if (tx!=null) tx.rollback();
e.printStackTrace();
}finally {
session.close();
}
}
/* Method to DELETE an employee from the records */
public void deleteEmployee(Integer EmployeeID) {
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Employee employee =
(Employee) session.get(Employee.class, EmployeeID);
session.delete(employee);
tx.commit();
} catch (HibernateException e) {
if (tx != null) tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
}
}
Класс Main
import Service.ManagementEmployee;
public class Main {
public static void main(String[] args) {
System.out.println("Start use Hibernate");
ManagementEmployee me = new ManagementEmployee();
/* Add few employee records in database */
Integer empID1 = me.addEmployee("Zara", "Ali", 1000);
Integer empID2 = me.addEmployee("Daisy", "Das", 5000);
Integer empID3 = me.addEmployee("John", "Paul", 10000);
/* List down all the employees */
me.listEmployees();
/* Update employee's records */
System.out.println(empID1);
System.out.println(empID2);
System.out.println(empID3);
}
}
Конфигурационный файл
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:mysql://localhost:3306/company</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">7028015</property>
<property name="connection.pool_size">1</property>
<!-- SQL Dialect-->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Mapping class -->
<mapping class="POJO.Employee"/>
<mapping resource="POJO/Employee.hbm.xml"/>
</session-factory>
</hibernate-configuration>
База данный MySQL Таблица в БД
CREATE TABLE `employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(20) DEFAULT NULL,
`last_name` varchar(20) DEFAULT NULL,
`salary` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_UNIQUE` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8
Заранее спасибо!
Идентификатор для сущности присваивается на основе стратегии генерации идентификаторов, которая задается аннотацией @GeneratedValue. В вашем случае, идентификатор основан на авто-инкременте первичного ключа в БД, поэтому используйте следующий вариант:
@GeneratedValue(strategy = GenerationType.IDENTITY)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем привет! Мне необходимо совместить два скрипта(два файла находятся по ссылке -> yadisk/d/kXrezA-o3MSnyu) в один единый скрипт, который будет брать...
Добрый деньВо Fragmente обрабатываю json и при помощи кастомного адаптера отправляю в лист вью
Имеется три числа: 10, 20, 30Как найти среднее из них (не самое большое и не самое маленькое), без множества условий?