2016-11-20 7 views
0

Wie kann ich ein Objekt in der Datenbank speichern und gleichzeitig die verknüpfte topic_id in der grammar.topics von topic_name erkennen?Ruhezustand: Erkennen eines verknüpften Felds und Speichern eines Objekts

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 

Antwort

0

Wenn in Ihrer Methode, haben Sie nicht die id für Topic Entität und Sie es brauchen Ihre Beginner Einheit für persistierende, können Sie diese Informationen aus der Datenbank abgerufen werden müssen.
Wenn in Topic Tabelle, ist topic_name UNIQUE. Einfach: Führen Sie eine Abfrage durch, bei der Sie das einzelne Thema entity oder topicId mit diesem topicName Wert abrufen.
Im Idealfall können Sie die Abfrage umgehen, indem Sie den Wert topicId beim Abrufen der Informationen zum Themenname beibehalten.

Sie könnten so ersetzen topicName Informationen in Ihrer Verarbeitung von topicId Informationen in der Lage sein, die Beziehung festzulegen, wenn Sie Ihre Beginner Instanz beibehalten möchten. :

public void updateResult(String topicId, int userId) 

statt

public void updateResult(String topic_name, int userId) 
Verwandte Themen