JPA Отношение много к одному - PullRequest
1 голос
/ 14 марта 2012

Я немного новичок в JPA и мне нужна помощь в извлечении отношения «многие к одному» в JPA.

У меня ниже сущности.

Пользователь, который хранит всю пользовательскую информацию.Пользователь расширяет Audiatable абстрактный класс, который предназначен для хранения параметров auidt, таких как дата последнего изменения, дата создания и т. Д.

Я пытаюсь добавить другие поля как lastUpdatedByUser , которые должны быть получены из lastUpdatedBy, для которого я пытаюсь добавить отношения Много-Один.Но отношение как-то не работает, я что-то здесь не так делаю?

AuditableEntity.java

public abstract class AuditableEntity<T extends Entity<T, ID>, ID> implements Auditable {

private static final long serialVersionUID = 1L;

@Column(name = "cruserid")
private Long createdBy;


@Column(name = "crdate")
@Type(type = JpaConstants.TYPE_LOCAL_DATE_TIME)
private LocalDateTime createdOn;

@Column(name = "chuserid")
private Long lastUpdatedBy;

@Column(name = "chdate")
@Type(type = JpaConstants.TYPE_LOCAL_DATE_TIME)
private LocalDateTime lastUpdatedOn;

@Transient
@ManyToOne(fetch = FetchType.LAZY, targetEntity = User.class)
@JoinColumn(name = "usrId", referencedColumnName = "chuserid")
private User lastUpdatedByUser;

User.java

public class User extends AuditableEntity<User, Long> {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "usrId")
private Long id;

@Column(name = "usrName")
private String name;

@Column(name = "loginame")
private String loginName;

}

1 Ответ

3 голосов
/ 14 марта 2012

Итак, вы отметили связь с @Transient, что означает, что поле не является постоянным и должно игнорироваться JPA.

И у вас также есть два разных поля для хранения одной и той же информации: lastUpdatedBy и lastUpdateByUser.Удалите первый и сопоставьте второй как

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "chuserid")
private User lastUpdatedByUser;

Это говорит о том, что ассоциация представляет собой ManyToOne для объекта User (не нужно указывать targetEntity, так как это тип поля), и чтоэта связь материализуется с помощью столбца соединения с именем «chuserid» в таблице аудируемого объекта и ссылки на идентификатор объекта «Пользователь» (referencedColumnName полезно только при использовании составных идентификаторов или при ссылке на объект по столбцу, который являетсяудостоверение личности)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...