2017-11-30 12 views
1

私はこのエンティティを持っています。メッセージには "parent"というプロパティがあり、このプロパティもMessageです。これはparent = nullのメッセージを作成し、parent = messageのメッセージはコメントになるので、ツリーメッセージとコメントがあります。Hibernate @ManyToOne自身を呼び出す

@Entity 
@Table(name = "message") 
public class Message extends BaseModel{ 

    @Id 
    @Column(name = "id", updatable = false, nullable = false) 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @ManyToOne 
    @JoinColumn(name="user_id", nullable=false) 
    private User user; 

    private String text; 

    @ManyToOne(fetch = FetchType.EAGER, optional = true) 
    @JoinColumn(name = "message_id",nullable = true) 
    private Message parent; 

しかし、私はここのコード私のエンティティを保存しようとすると:

org.hibernate.TransientPropertyValueException:-nullでないプロパティ 参照私は、常にこのメッセージが表示されます

Message message = messageRepository.save(
       MapperUtils.getInstance().map(messageDTO,Message.class) 
     ); 

を一時的な値 - 一時的なインスタンスは、現在の操作である の前に保存する必要があります。gara.models.Message.user - > gara.models.User;
org.hibernate.TransientPropertyValueException:-nullでないプロパティ
参照過渡値 - 一時的なインスタンスが 現在の操作の前に保存する必要があります: ネストされた例外はjava.lang.IllegalStateExceptionあるgara.models.Message.user - > GARA。 models.User」私はそれを修正できたり周りの仕事がありますどのように

ありがとう!

答えて

1

エラーは解決策を伝えます。あなたはunmaでユーザーの依存関係を設定していますnaged/detachedオブジェクト。

あなたは(レポ法を用いて、例えば)永続コンテキストに既に存在するユーザーとのメッセージを移入することを確認してください:

userRepository.getOne(id); // just get the reference 

や、ユーザーがDBにまだない場合は... userRepository.save、または関係のカスケードオプションを設定します。

@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) 
@JoinColumn(name="user_id", nullable=false) 
private User user; 

同じ場合はparent自己依存関係にある可能性があります。

+0

あなたは私もこの行を見ました:MapperUtils.getInstance()。map(messageDTO、Message.class)は、user-> idプロパティなしでオブジェクトを解析します。 –

関連する問題