package com.trifulcas.models; import java.util.Date; import java.util.List; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; import jakarta.persistence.Temporal; import jakarta.persistence.TemporalType; @Entity @Table(name = "city") public class City { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "city_id") private Short cityId; @Column(name = "city", nullable = false) private String city; // En la entidad de 'varios' ponemos ManyToOne @ManyToOne // Especificamos cual es la clave foránea de esta relación @JoinColumn(name = "country_id", nullable = false) // La propiedad siempre será la entidad relacionada private Country country; // Cuando recuperamos la entidad se cargan automáticamente las entidades relacionadas // Es decir, cuando yo cargo una ciudad se carga su país // Y puedo acceder a sus valores @OneToMany(mappedBy="city",cascade=CascadeType.ALL) private List<Address> addreses; @Column(name = "last_update", nullable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP") @Temporal(TemporalType.TIMESTAMP) private java.util.Date lastUpdate = new Date(); // Constructor, getters, and setters public City() { } public City(String city, Country country) { this.city = city; this.country = country; } public Short getCityId() { return cityId; } public void setCityId(Short cityId) { this.cityId = cityId; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public Country getCountry() { return country; } public void setCountry(Country country) { this.country = country; } public java.util.Date getLastUpdate() { return lastUpdate; } public void setLastUpdate(java.util.Date lastUpdate) { this.lastUpdate = lastUpdate; } public List<Address> getAddreses() { return addreses; } public void setAddreses(List<Address> addreses) { this.addreses = addreses; } // Cuidado con poner country porque entramos en bucle @Override public String toString() { return "City [cityId=" + cityId + ", city=" + city + ", country="+country.getCountry()+"]"; } }
package com.trifulcas.models; import java.sql.Timestamp; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.ManyToOne; import jakarta.persistence.Table; @Entity @Table(name = "address") public class Address { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "address_id") private short addressId; @Column(name = "address", nullable = false, length = 50) private String address; @Column(name = "address2", length = 50) private String address2; @Column(name = "district", nullable = false, length = 20) private String district; @ManyToOne @JoinColumn(name="city_id") private City city; @Column(name = "postal_code", length = 10) private String postalCode; @Column(name = "phone", nullable = false, length = 20) private String phone; @Column(name = "last_update", nullable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP") private Timestamp lastUpdate; // Getters and Setters public short getAddressId() { return addressId; } public void setAddressId(short addressId) { this.addressId = addressId; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getAddress2() { return address2; } public void setAddress2(String address2) { this.address2 = address2; } public String getDistrict() { return district; } public void setDistrict(String district) { this.district = district; } public City getCity() { return city; } public void setCity(City city) { this.city = city; } public String getPostalCode() { return postalCode; } public void setPostalCode(String postalCode) { this.postalCode = postalCode; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public Timestamp getLastUpdate() { return lastUpdate; } public void setLastUpdate(Timestamp lastUpdate) { this.lastUpdate = lastUpdate; } @Override public String toString() { return "Address [addressId=" + addressId + ", address=" + address + ", address2=" + address2 + ", district=" + district + ", city=" + city + ", postalCode=" + postalCode + ", phone=" + phone + ", lastUpdate=" + lastUpdate + "]"; } }
No olvideis anotar en HibernateUtil:
... configuration.addAnnotatedClass(Address.class); ...