Spring objectdb id всегда 0
Я создаю веб программу используя Spring + JSP и ObjectDB.
Контроллер Spring:
@RequestMapping(value="/assignguesttohotel",method = RequestMethod.GET)
public ModelAndView assignguesttohotel_form(HttpServletResponse response) throws IOException {
return new ModelAndView("assignguesttohotel");
}
@RequestMapping(value="/assign",method = RequestMethod.POST)
public ModelAndView assigning(Guest guest, Hotel hotel) {
ModelAndView m = new ModelAndView();
System.out.println(guest.getId());
m.addObject("guestid", guest.getId());
m.addObject("hotelid", hotel.getId());
HotelDAO dao = new HotelDAO();
dao.assignGuestToHotel(guest.getId(), hotel.getId());
m.setViewName("temp");
return m;
}
Проблема заключается в том, что id постоянно выдает 0. Не могу разобраться почему.
JSP файл:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
<title>Guest register</title>
</head>
<body>
<div align="center">
<h1>Search Guest by name</h1>
<form:form action="assign" method="post">
<table>
<tr>
<td>Guest id:</td>
<td>
<input name="guestid" type="number">
</td>
</tr>
<tr>
<td>Hotel id:</td>
<td>
<input name="hotelid" type="number">
</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="Seach"></td>
</tr>
</table>
</form:form>
</div>
</body>
</html>
DAO:
public void assignGuestToHotel(long guestId, long hotelId) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("$objectdb/db/test.odb");
EntityManager em = emf.createEntityManager();
Guest guest = em.find(Guest.class, guestId);
Hotel hotel = em.find(Hotel.class, hotelId);
if (guest != null && hotel != null) {
hotel.addGuest(guest);
guest.addHotel(hotel);
} else {
System.out.println("Guest or hotel not found.");
}
}
Класс Hotel:
package com.example.labs.model;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Set;
@Entity
public class Hotel implements Serializable {
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long _id;
private String name;
@OneToMany(mappedBy="hotel")
Set<Guest> guests;
public Hotel() {}
public Hotel(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setId(Long id) {
this._id = id;
}
public Long getId() {
return _id;
}
public void addGuest(Guest guest) {
guests.add(guest);
}
public Set<Guest> getGuests() {
return guests;
}
@Override
public String toString() {
return "{ name = " + name + ", " + "id = " + _id + " };";
}
}
Класс Guest:
package com.example.labs.model;
//import javax.persistence.Entity;
//import javax.persistence.GeneratedValue;
//import javax.persistence.Id;
import javax.persistence.*;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
@Entity
public class Guest implements Serializable {
private static final long serialVersionUID = 1L;
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id;
private String FirstName;
private String LastName;
private Date BirthDate;
private String Email;
private String Country;
private String Address;
private Integer ZipCode;
private String PhoneNumber;
private String gender;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="HOTEL_ID", nullable=false)
Hotel hotel;
public Guest() {}
public Guest(String FirstName, String LastName, LocalDate BirthDate, String Email, String Country, String Address, Integer ZipCode, String PhoneNumber, String gender, Hotel hotel) {
this.FirstName = FirstName;
this.LastName = LastName;
this.BirthDate = Date.from(BirthDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
this.Email = Email;
this.Country = Country;
this.Address = Address;
this.ZipCode = ZipCode;
this.PhoneNumber = PhoneNumber;
this.gender = gender;
this.hotel = hotel;
}
public void setId(Long id) {
this.id = id;
}
public void setFirstName(String firstName) {
FirstName = firstName;
}
public void setLastName(String lastName) {
LastName = lastName;
}
public void setBirthDate(Date birthDate) {
BirthDate = birthDate;
}
public void setEmail(String email) {
Email = email;
}
public void setCountry(String country) {
Country = country;
}
public void setAddress(String address) {
Address = address;
}
public void setZipCode(Integer zipCode) {
ZipCode = zipCode;
}
public void setPhoneNumber(String phoneNumber) {
PhoneNumber = phoneNumber;
}
public void setGender(String gender) {
this.gender = gender;
}
public Long getId() {
return id;
}
public String getFirstName() {
return FirstName;
}
public String getLastName() {
return LastName;
}
public Date getBirthDate() {
return BirthDate;
}
public String getEmail() {
return Email;
}
public String getCountry() {
return Country;
}
public String getAddress() {
return Address;
}
public Integer getZipCode() {
return ZipCode;
}
public String getPhoneNumber() {
return PhoneNumber;
}
public String getGender() {
return gender;
}
public void addHotel(Hotel hotel) {
this.hotel = hotel;
}
public Hotel getHotel() {
return hotel;
}
@Override
public String toString() {
return "{ " + id + " " + FirstName + " " + LastName + " " + BirthDate + " " + Email + " " + Country +
" " + Address + " " + ZipCode + " " + PhoneNumber + " " + gender + " };";
}
}
Можете объяснить в чем причина, почему hotel.getId() и guest.getId() всегда выдает ответ 0. В базе данных все нормально, все id есть, но какую бы я не ставил постоянно ответ только 0.
Ответы (1 шт):
Автор решения: Roman C
→ Ссылка
Потому, что неправильный байндинг переменных. Надо использовать что-то типа
<input name="guest.id" type="number">
<input name="hotel.id" type="number">