#java #hibernate #jpa #hibernate-annotations
#java #впасть в спящий режим #jpa #спящий режим-аннотации
Вопрос:
Я попытался найти эту конкретную проблему, но не смог получить никакой помощи
При создании Employee -> Учетная запись должна быть создана.
Мои сущности -> Сущность сотрудника
@Entity
@Table(name = "EMPLOYEE")
public class EMPLOYEE implements Serializable {
private static final long serialVersionUID = -1798070786993154676L;
@Id
@Column(name = "EMPLOYEE_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private int EMPLOYEE_id;
@Column(name = "EMPLOYEE_name")
private String EMPLOYEE_name;
@Column(name = "EMPLOYEE_desc")
private String EMPLOYEE_desc;
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name = "EMPLOYEE_id")
@MapsId
private ACCOUNT account;
// getters and setters
}
сущность учетной записи ->
@Entity
@Table(name = "ACCOUNT")
public class ACCOUNT implements Serializable {
private static final long serialVersionUID = -6790693372846798580L;
@OneToOne( fetch = FetchType.LAZY)
@JoinColumn(name = "EMPLOYEE_id")
private EMPLOYEE employee
@Id
@Column(name = "account_id")
private int account_id;
@Column(name = "account_desc")
private String account_desc;
// getters setters
}
При создании Employee -> Учетная запись должна быть создана.
Мой pojo отображается правильно, как показано ниже ->
employee = { EMPLOYEE_id = 0 ,
EMPLOYEE_name = 'abc' ,
EMPLOYEE_desc = 'new employee' ,
account = { account_id = 1 ,
account_desc = 'my account' ,
EMPLOYEE_id = 0 }
}
поэтому, когда я тот же объект employee — он генерирует employee_id , но тот же employee_id не заполняется в таблице учетных записей
Это частично работает -> в таблице учетных записей Employee_id не заполняется.
Я пробовал искать так много вопросов в stackOverflw, но пока безуспешно. Любая помощь приветствуется.
Заранее благодарю вас
Комментарии:
1. что вы делаете
ACCOUNT.setEmployee(employee)
где-нибудь в своем коде?2. Пожалуйста, предоставьте информацию о том, как вы создаете
Employee
amp;Account
objects и сохраняете ее.3. добавлена дополнительная информация о заполнении моего объекта employee
Ответ №1:
Если @OneToOne определен на обеих сторонах отношения, одна сторона должна быть владельцем. Это объект, который имеет внешний ключ. Другая сторона должна иметь атрибут mappedBy. Итак, для меня работает следующее
@Entity
@Table(name = "EMPLOYEE")
public class EMPLOYEE implements Serializable {
@OneToOne(cascade= CascadeType.ALL, mappedBy = "employee") // non-owner side
private Account account;
....
}
@Entity
@Table(name = "ACCOUNT")
public class Account implements Serializable {
@OneToOne( fetch = FetchType.LAZY)
@JoinColumn(name = "EMPLOYEE_id") // owner-side
private Employee employee;
}
Комментарии:
1. Привет, Раша, спасибо за ответ, но у меня это не сработало, в зависимости от контекста мой сотрудник является владельцем, когда создается учетная запись сотрудника, которая должна быть создана ,
2. Я попробовал следующее, и это сработало:<br> Сотрудник e = новый сотрудник (); Учетная запись a = новая учетная запись(); e.setAccount(a); a.setEmployee(e); EntityManager.persist(e);