org.PostgreSQL.util.PSQLException: ERROR: column user0.id n'existe pas-hibernation
j'ai une classe de modèle qui est mappée à une base de données postgres en utilisant hibernation. Mon modèle de classe est:
@Entity
@Table(name="USER")
public class User {
@Id
@GeneratedValue
@Column(name="id")
private long id;
@Column(name="username", unique=true)
private String username;
@Column(name="email")
private String email;
@Column(name="created")
private Timestamp created;
public User(long id, String username, String email) {
this.id = id;
this.username = username;
this.email = email;
}
}
j'essaie de récupérer l'utilisateur avec le nom d'utilisateur "adam" en utilisant la requête suivante:
tx = session.beginTransaction();
TypedQuery<User> query = session.createQuery("FROM User u WHERE u.username = :username", User.class).setParameter("username", "adam");
user = query.getSingleResult();
j'obtiens une exception qui dit:
org.postgresql.util.PSQLException: ERROR: column user0_.id does not exist
Ma base de données à partir de bash shell ressemble à cela:
comment les attributs de classe de carte d'hibernation aux colonnes de tableau? Est-elle adaptée basée sur l' @Column(name="username")
seulement ou essaie-t-il également de correspondre sur la base de types de données et de contraintes comme unique/auto-increment?
1 réponses
Explication
cela donne cette erreur :
org.postgresql.util.PSQLException: ERROR: column user0_.id does not exist
parce que quand vous créez une base de données PostgreSQL il crée un schéma par défaut nommé public
, donc quand vous ne spécifiez pas le nom dans le Entity
, il va vérifier automatiquement dans le schéma public, pour que vous obtenez cette erreur.
une Autre chose que confirmer que le nom de schéma est correct, l'erreur dit :
column user0_.id does not exist
et non :
column myapp.user0_.id does not exist
-------^----^
qui confirment que l' utilisation de la requête public schema
et le schema myapp
Solution
Pour résoudre ce problème, vous devez spécifier le nom de schéma comme ceci :
@Table(name="USER", schema = "myapp")
Conseil
n'utilisez pas de majuscules dans le nom des tableaux ou des colonnes de PostgreSQL.
@Table(name="user", schema = "myapp")
et utilisateur le nom est réservé mot-clé dans PostgreSQL ta a regardez