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">
→ Ссылка