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:

database

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?

11
demandé sur YCF_L 2017-08-20 15:49:23

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

18
répondu YCF_L 2017-12-05 07:15:50