2012-03-14 4 views
1

JPA의 초보자이며 JPA에서 다 대일 관계를 가져 오는 데 도움이 필요합니다.JPA 다 대일 관계

아래 엔티티가 있습니다.

모든 사용자 정보를 저장하는 사용자. 사용자는 등 마지막으로 수정 한 날짜, 만든 날짜와 같은 auidt의 paramters을 들고입니다 Audiatable 추상 클래스를 확장

내가있는 내가 많은을 추가 amtrying lastUpdatedBy에서 가져온 받아야하는 lastUpdatedByUser같은 다른 필드를 추가하는 것을 시도하고있다 - 한 관계. 하지만 그 관계는 어떻게 든 작동하지 않습니다. 제가 여기서 잘못된 것을하고 있습니까?

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

}

답변

2

글쎄, 당신은 필드가 지속되지 않습니다되어야한다는 것을 의미 @Transient과의 연관을 표시 JPA는이를 무시합니다.

또한 동일한 정보를 저장하는 두 개의 다른 필드 (lastUpdatedBylastUpdateByUser)가있는 것 같습니다. 첫 번째를 제거하고

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

이 협회는 사용자 엔티티 (이 필드의 유형이기 때문에 targetEntity을 지정할 필요가 없습니다)에 ManyToOne 것을 알려줍니다로 두 번째지도를,이 협회는 감사 대상 엔티티의 테이블에서 "chuserid"라는 조인 열로 구체화되고 User 엔티티의 ID를 참조합니다 (referencedColumnName은 복합 ID를 사용할 때 또는 ID 인 열로 엔티티를 참조 할 때만 유용합니다))

+0

안녕하세요, thnx하지만 문제는 우리가 lastUpdateBy ....를 제거 할 수 없다는 것입니다. 이미 기존 코드에서 많은 부분을 참조했습니다. 그래서 우리는 일시적인 필드 lastUpdateByUser를 추가하여 우리의 목적을 저장하려고합니다. 지금 ... 그 종류의 o f weired design하지만 refractoring이 시간 제한으로 인해 보류 중임 –

+0

읽기 전용 모드로만 사용되는 경우 위와 같이 lastUpdatedByUser 맵을 제거하고'lastUpdateBy'의 열을 삽입 할 수 없으며 nonmarkable로 표시 할 수 있어야합니다 업데이트 가능. –

+0

Thnx 다시 말하지만, 마지막 코멘트에 따라 작동하지만 불행히도 lastUpdateBy는 읽기 전용 모드에서만 사용되지 않습니다 ... 각 엔티티에 대해 마지막 업데이트를 수행 한 사용자 ID를 업데이트하기 위해 호출됩니다. –

관련 문제