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); ...