问题描述
我正在了解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);
现在可以了! ;)