0

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

zeroekran
  • 21
  • 1
  • Log the exception you're catching in editAddress. I assume you need to update the person instead of session.update(address). – pma Sep 02 '20 at 12:39

1 Answers1

0

It was missing: personDaoHibernate.edit(person); In PersonService method.

public void editAddress(Person person){
        personDaoHibernate.editAddress(person);
        personDaoHibernate.edit(person);

Now it works! ;)

zeroekran
  • 21
  • 1