2016-11-20 7 views
0

のオブジェクトtopic_idtopic_nameでデータベースに保存して同時に検出する方法はありますか?Hibernate:リンクされたフィールドを検出してオブジェクトを保存する

public void updateResult(String topic_name, int userId) { 
    Session session = sessionFactory.getCurrentSession(); 
    Beginner bgn = new Beginner(); 
    bgn.setUserId(userId); 
    bgn.setScore(100); 
    // how to detect `topic_id` here by `topic_name` from the `grammar.topics` 
    bgn.setTopic_id(...); 
    session.save(bgn); 
} 

enter image description here

@Entity 
@Table(name = "beginner", uniqueConstraints = 
    {@UniqueConstraint(columnNames = {"user_id", "topic_id"})}) 
public class Beginner implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name = "user_id", nullable = false) 
    private int user_id; 

    @Id 
    @Column(name = "topic_id", nullable = false) 
    private int topic_id; 

    @Column(name = "score", nullable = false) 
    private int score; 

    //getters&setters 

答えて

0

あなたの方法では、あなたがidTopicための実体を持っていないし、あなたのBeginnerエンティティを永続化するためにそれが必要な場合は、データベースからその情報を取得する必要があります。
Topicテーブルの場合、topic_nameはUNIQUEです。簡単:単一のトピックentityまたはを取得して、このtopicName値を持つクエリを実行します。
理想的には、トピック名情報を取得するときにtopicIdの値を保持することでクエリを回避できます。

あなたはあなたがあなたのBeginnerインスタンスを保持したい場合に関係を設定することができるようにtopicId情報によって、あなたの処理でtopicName情報を置き換えることができます。 :

public void updateResult(String topicId, int userId) 

代わりの

public void updateResult(String topic_name, int userId) 
関連する問題