webentwicklung-frage-antwort-db.com.de

so erstellen Sie zwei Spalten als Primärschlüssel in der Anmerkungsklasse "Hibernate"

Dies ist meine Anmerkungsklasse und ich möchte userId und groupId als beides als Primärschlüssel. Ich habe mehr Fragen ( Question ) dazu gefunden, aber keine relevante Antwort gefunden. Ich habe weniger Ansehen, daher kann ich Beiträge nicht kommentieren. Deshalb stelle ich meine Frage hier.

Das ist mein Code ..

import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.NaturalId;

@Entity
@Table(name="user_group")
public class user_group {

@Column(name="serviceProvider")
private String serviceProvider;

@Column(name="enterpriseId")
private String enterpriseId;

@Column(name="department")
private String department;

@Column(name="trunkGroupName")
private String trunkGroupName;
@Id
@Column(name="userId")
private String userId;


@Column(name="groupId")
private String group;


public String getUserId() {
    return userId;
}


public void setUserId(String userId) {
    this.userId = userId;
}


public String getGroup() {
    return group;
}


public void setGroup(String group) {
    this.group = group;
}

public String getServiceProvider() {
    return serviceProvider;
}

public void setServiceProvider(String serviceProvider) {
    this.serviceProvider = serviceProvider;
}

public String getEnterpriseId() {
    return enterpriseId;
}

public void setEnterpriseId(String enterpriseId) {
    this.enterpriseId = enterpriseId;
}

public String getDepartment() {
    return department;
}

public void setDepartment(String department) {
    this.department = department;
}

public String getTrunkGroupName() {
    return trunkGroupName;
}

public void setTrunkGroupName(String trunkGroupName) {
    this.trunkGroupName = trunkGroupName;
}


}
7
amit bhardwaj

Sie sollten eine neue @Embeddable-Klasse erstellen, die die PK-Felder enthält: 

@Embeddable
public class user_groupId implements Serializable { 
    @Column(name="userId")
    private String userId;

    @Column(name="groupId")
    private String group;
}

Und benutze es im @Entity als @EmbeddedId

@Entity
public class user_group {

    @EmbeddedId
    user_groupId id;

    ...
}

Sie können dazu auch die Annotation @IdClass verwenden. 

Diese ausgezeichnete Antwort von Pascal Thivent erläutert die Details. Sie können sich auch die diese andere Antwort ansehen, die ich vor einiger Zeit zu einer fast identischen Frage gepostet habe.

Als Randbemerkung können Sie, wenn Sie die DB-Struktur steuern, auch die Verwendung von zusammengesetzten Schlüsseln in Betracht ziehen. Es gibt einige Gründe dafür .

19
Xavi López

sie können einen zusammengesetzten Primärschlüssel im Ruhezustand mithilfe der Annotation @UniqueConstraint erstellen.

@Table(name="user_group",[email protected](columnNames= {"userId","groupId"}))
public class user_group 
{
       @Column(name="userId")
       private String userId;

       @Column(name="groupId")
       private String group;
}

die obige Methode ist nicht möglich, wenn wir spring verwenden, da zum Erstellen eines zusammengesetzten Primärschlüssels eine Klasse erstellt werden muss.
Im Ruhezustand und im Frühling müssen Sie nur POJO-Klassen erstellen, die als Entität auf Ihrem System verfügbar sind.

0
Solanki Vaibhav