2012-03-14 32 views
1

JPAの初心者で、JPAの多対1の関係を取得するための助けが必要です。JPA多対1の関係

以下のエンティティがあります。

すべてのユーザー情報を格納するユーザー。ユーザーは、など、最終更新日、作成日のようなauidtの偶然にを保持するためのものであるAudiatable抽象クラスを拡張する

私はそのために、私は多くを追加するamtrying lastUpdatedByから取り出され得るべきlastUpdatedByUserとして別のフィールドを追加しようとしています1つの関係。 しかし、関係は何とか働いていない、私はここで何か間違っている?

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によって無視される。

また、同じ情報を格納する2つのフィールドがあるようです:lastUpdatedBylastUpdateByUser。これは、関連付けはUserエンティティ(それはフィールドの型だからtargetEntityを指定する必要はありません)にManyToOneであり、この協会ということを告げる最初のものを取り外し、

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

ように、第2の1のマッピング監査可能なエンティティの表の「chuserid」という名前の結合列によって実現され、UserエンティティのIDを参照します(referencedColumnNameは、コンポジットIDを使用する場合、またはIDである列でエンティティを参照する場合にのみ役立ちます) )

+0

こんにちは、問題は私たちはlastUpdateBy ....を削除することはできません私たちは既存のコードの場所の多くで参照してください..私たちは過渡的なフィールドlastUpdateByUserを追加するだけで私たちの目的を保存する今は...その種類o f weired designしかしrefractoringが時間制約のために保留になっている –

+0

読み取り専用モードでのみ使用されている場合は、上記のようにlastUpdatedByUserのマップを削除し、 'lastUpdateBy'の列を挿入不可、更新可能。 –

+0

Thnx再び、最後のコメントごとに動作しますが、残念ながらlastUpdateByは読み取り専用モードでのみ使用されていません...各エンティティに対して、最後の更新を行ったユーザーIDを更新するために呼び出されます。 –