У меня возникла небольшая проблема с hibernate, так как hibernate не принимает нормальный синтаксис SQL-запросов. Когда я отправляю свой запрос с оператором select, который должен возвращать точное целое число 37 в базу данных, я ничего не получаю взамен. Это запрос в синтаксисе sql:
«выберите идентификатор из tbl_employee, где bsn = '36372837'», это возвращает 37. Но когда я выполняю этот запрос из спящего режима со всеми ссылками на объекты и дерьмом, он не работает.
Пожалуйста, проверьте мой код и посмотрите, знаете ли вы, как решить проблему:
public void RegisterWorkHours(TimeRegistration object)
{
EntityManagerFactory emf = javax.persistence.Persistence.createEntityManagerFactory("timereg");
EntityManager em = emf.createEntityManager();
try
{
String get_employee_id = "SELECT emp.id FROM Employee as emp WHERE emp.bsn=:bsn";
Query employee_query = em.createQuery(get_employee_id);
employee_query.setParameter("bsn", object.getEmployee().getBsn());
int id = employee_query.getFirstResult();
System.out.println("query returns employee id: " + id);
object.getEmployee().setId(id);
String get_project_id = "SELECT p.projectID FROM Project as p WHERE p.projectname=:projectname";
Query project_query = em.createQuery(get_project_id);
project_query.setParameter("projectname", object.getProject().getProjectname());
int projectid = project_query.getFirstResult();
System.out.println("query returns projectid: " + projectid);
object.getProject().setProjectID(projectid);
em.getTransaction().begin();
em.persist(object);
em.getTransaction().commit();
}
catch (Exception ex)
{
System.out.println(ex);
}
}
Класс работника:
@Entity
@Table(name = "tbl_employee")
public class Employee
{
@Id
@SequenceGenerator(name="employeeSequence", sequenceName="SEQ_EMPLOYEE", allocationSize =1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="employeeSequence")
@Column(name="id")
private int id;
@Column(name = "bsn")
@NaturalId
private String bsn;
@Column(name = "first_name")
private String firstname;
@Column(name = "last_name")
private String lastname;
@Column(name="birth_date")
private String birthDate;
@Column(name="address")
private String address;
@Column(name="house_number")
private String houseNumber;
@Column(name="city")
private String city;
@Column(name="zip")
private String zip;
//Constructor
protected Employee() {}
public Employee(String bsn, String firstname, String lastname)
{
setBsn(bsn);
setFirstname(firstname);
setLastname(lastname);
}
public Employee(String bsn, String firstname, String lastname, String address, String housenumber)
{
setBsn(bsn);
setFirstname(firstname);
setLastname(lastname);
setAddress(address);
setHouseNumber(housenumber);
}
public Employee(String bsn, String firstname, String lastname, String address, String housenumber, String zip, String city)
{
setBsn(bsn);
setFirstname(firstname);
setLastname(lastname);
setAddress(address);
setHouseNumber(housenumber);
setZip(zip);
setCity(city);
}
//The rest is one big list of getters and setters.
}
Класс TimeRegistration
@Entity
@Table(name = "tbl_timeregtest")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class TimeRegistration
{
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private Project project;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private Employee employee;
@Id
@SequenceGenerator(name="timeregSequence", sequenceName="SEQ_TIMEREG", allocationSize =1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="timeregSequence")
@Column(name="ID")
private int ID;
@Column(name="date")
private String date;
@Column(name="hours")
private int hours;
//Constructor
protected TimeRegistration() {}
public TimeRegistration(Project project, Employee employee, String date, int hours )
{
setProject(project);
setEmployee(employee);
setDate(date);
setHours(hours);
}
//the rest is all getter setter stuff
}
основная пустота
public class Main
{
public static void main(String [ ] args)
{
Persistence persistence = new Persistence();
Project project = new Project("AlphaMouse", "11-2-2013", "12-4-2019");
Employee employee = new Employee("398723912", "Stoel", "Stra");
TimeRegistration register = new TimeRegistration(project, employee, "21-2-2024", 8);
persistence.RegisterWorkHours(register) ;
}}
Заранее спасибо,
Benjamin