仅更新嵌入式数据,而不更新所有内容方法实施中的问题

问题描述

我正在了解Hibernate。我在实现editAddress方法时遇到问题。我想编辑个人的地址数据,而不更新个人数据(姓名,姓氏等)。地址已嵌入。

这是我的POJO课:

@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;
    }

}

这是Hibernate实现的editAddress方法

@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方法

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

    }

和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;

它正在更改新地址,但未保存此更改。我错过了什么? 对不起所有错误-我只是初学者...;)

解决方法

它不见了: personDaoHibernate.edit(person); 在PersonService方法中。

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

现在可以了! ;)