2017-09-30 5 views
1

Ich habe ein Problem mit One-To-One Fremdschlüssel Relationship Mapping in meinem Projekt.One-to-One Foreign Key

User.java

@Access(AccessType.FIELD) 
@Entity 
@Table(name = "users") 
public class User { 
public Role ro; 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
public int user_id; 
@Column(name = "username") 
public String username; 
@Column(name = "password") 
public String password; 


@OneToOne(cascade = CascadeType.ALL) 
@JoinColumn(name = "username") 
public Role getRo() { 
    return ro; 
} 

public void setRo(Role ro) { 
    this.ro = ro; 
} 

@Column(name = "enabled") 

public int enabled; 


public User() { 
} 

public int getUser_id() { 
    return user_id; 
} 

public User(String username, String password, int enabled) { 
    this.username = username; 
    this.password = password; 
    this.enabled = enabled; 

} 


public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

public int getEnabled() { 
    return enabled; 
} 

public void setEnabled(int enabled) { 
    this.enabled = enabled; 
} 



@Override 
public String toString() { 
    return String.format(
      "student[id=%d, name='%s', age='%d']", 
      ro.getUsername(), username, ro.getUsername()); 
} 

} 

Role.java

import javax.persistence.*; 

@Access(AccessType.FIELD) 
@Entity 
@Table(name = "user_roles") 
public class Role { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
public int user_role_id; 
@Column(name = "username") 
public String username; 
@Column(name = "role") 
public String role; 

public User user; 


@OneToOne(mappedBy = "ro") 
public User getUser() { 
    return user; 
} 

public void setUser(User user) { 
    this.user = user; 
} 



public Role(String username, String role) { 
    this.username = username; 
    this.role = role; 
} 

public Role() { 
} 

public int getUser_role_id() { 
    return user_role_id; 
} 



public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

public String getRole() { 
    return role; 
} 

public void setRole(String role) { 
    this.role = role; 
} 



} 

dies ist der Fehler:

Verursacht durch: org.hibernate.MappingException: Typ konnte nicht bestimmen für: com. company.project.models.Role, bei Tabelle: Benutzer, für Spalten: [org.hibernate.mapping.Column (ro)] bei org.hibernate.mapping.SimpleValue.getType (SimpleValue.java:431) ~ [hibernate- Ader- 5.0.12.Final.jar: 5.0.12.Final] bei org.hibernate.mapping.SimpleValue.isValid (SimpleValue.java:398) ~ [Hibernate-Core-5.0.12.Final.jar: 5.0.12. Abschließend] bei org.hibernate.mapping.Property.isValid (Property.java:225) ~ [Hibernate-Core-5.0.12.Final.jar: 5.0.12.Final] bei org.hibernate.mapping.PersistentClass. validate (PersistentClass.java:595) ~ [Hibernate-Core-5.0.12.Final.jar: 5.0.12.Final] bei org.hibernate.mapping.RootClass.validate (RootClass.java:265) ~ [Winterschlaf- core-5.0.12.Final.jar: 5.0.12.Final] bei org.hibernate.boot.internal.MetadataImpl.validate (MetadataImpl.java:329) ~ [hibernate-core-5.0.12.Final.jar: 5.0.12.Final] bei org.hibernate.boot.internal.SessionFactoryBuilderImpl.build (SessionFactoryBuilderImpl.java:443) ~ [Hibernate-Core-5.0.12.Final.jar: 5.0.12.Final] bei org. hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build (EntityManagerFactoryBuilderImpl.java:879) ~ [Hibernate-EntityManager-5.0.12.Final.jar: 5.0.12.Final] ... 22 gemeinsamer Rahmen weggelassen

+0

Versuchen Sie, alle '@ Column' und' @ MappedBy' entweder für Variablen oder Getter in Ihrer User 'Class' zu kommentieren. –

Antwort

2

Sie sollten alle @Column/@OneToOne entweder auf Variablendeklaration oder getter() s kommentieren. Aus diesem Grund konnte Hibernate Role in class User nicht finden.

+0

Danke, ich habe dieses Problem jetzt Keine Kennung für die Entität angegeben: com.company.project.models.User. Dies ist mein Code @Id @GeneratedValue (strategie = GenerationType.AUTO) öffentliche int getUser_id() { return user_id; } –

+0

Sind Sie sicher, dass Sie Feld- und Methoden-Anmerkungen nicht mischen können? Ich stimme zu, dass es eine schlechte Übung ist, dies zu tun. – Christine

+0

Ich bin sicher, Sie können es nicht für '@ Column' Annotation tun, nicht ganz sicher für die Zuordnung. In der Tat schlechte Praxis. Vielen Dank. –