I'm learning about Hibernate. I have problem with implementation of editingAddress method. I would like to edit Person's address data without updating personal data (name, surname etc.). Address is embedded.
This is my POJO class:
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "person")
public class Person implements Comparable<Person> {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "surname",nullable = false)
private String surname;
@Column
private int age;
@Column
private int height;
@Column
private double weight;
@Embedded
@AttributeOverrides({
@AttributeOverride(name="street", column = @Column(name="street")),
@AttributeOverride(name="city", column = @Column(name = "city")),
@AttributeOverride(name="zipCode",column = @Column(name = "zipCode")),
@AttributeOverride(name="homeNumber",column = @Column(name="homeNumber"))
})
private Address address;
@Override
public int compareTo(Person o) {
int compare = surname.compareTo(o.surname);
if (compare == 0) {
compare = name.compareTo(o.name);
}
return compare;
}
}
This is editAddress method Hibernate implementation:
@Override
public int editAddress(Person person) {
Session session = sessionFactory.openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
Address address = person.getAddress();
session.update(address);
transaction.commit();
} catch (RuntimeException e) {
if (transaction != null && transaction.isActive()) {
transaction.rollback();
}
}
session.close();
return person.getId();
PersonService method:
public void editAddress(Person person){
personDaoHibernate.editAddress(person);
}
And AppMenu:
case EDIT_ADDRESS:
System.out.println("Please enter ID of Person which address will be edited:");
int idEdit = scanner.nextInt();
Optional<Person> found = personService.findById(idEdit);
Person person2 = found.get();
System.out.println("ADDRESS - city:");
String city = scanner.next();
System.out.println("ADDRESS - zipCode:");
String zipCode = scanner.next();
System.out.println("ADDRESS - street:");
String street = scanner.next();
System.out.println("ADDRESS - home number:");
int homeNumber = scanner.nextInt();
scanner.nextLine();
Address address = new Address(city, zipCode, street, homeNumber);
person2.setAddress(address);
personService.editAddress(person2);
System.out.println(person2);
break;
And it's changing address for the new one but not saving this changes. What did I miss? Sorry for all mistakes - I'm only beginner...;)