Связь не существует при попытке доступа к существующей БД - PullRequest
0 голосов
/ 01 сентября 2018

Я установил соединение с базой данных в Wildfly без каких-либо проблем, и соединение работает.

Я создаю клон Twitter, но при попытке получить доступ к БД я получаю сообщение об ошибке:

Вызывается: org.postgresql.util.PSQLException: ОШИБКА: отношение "твит" не существует

JPA, похоже, не создает схему автоматически. Запуск аналогичного кода в другом проекте автоматически создает схемы сущностей. Я очень растерялся относительно того, что здесь происходит.

У меня есть базовая твит-сущность

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;

@Entity
@XmlRootElement
public class Tweet implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String tweet;
    private String user;

    public Tweet() {}

    public Tweet(String tweet, String user) {
        this.tweet = tweet;
        this.user = user;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTweet() {
        return tweet;
    }

    public void setTweet(String tweet) {
        this.tweet = tweet;
    }

    public String getUser() {
        return user;
    }

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

И DAO использует следующий код для доступа к данным:

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.List;

@Stateless
public class TweetDaoImpl implements TweetDao {

    @PersistenceContext
    EntityManager em;

    @Override
    public Tweet insertTweet(Tweet tweet) {
        em.persist(tweet);

        return tweet;
    }

    @Override
    public List<Tweet> getUserTweets(String user) {
        Query query = em.createQuery("SELECT tweet FROM Tweet tweet WHERE tweet.user = :user");
        query.setParameter("user", user);

        return query.getResultList();
    }

    @Override
    public List<Tweet> getAllTweets() {
        Query query = em.createQuery("SELECT tweet FROM Tweet tweet");
        return query.getResultList();
    }

    @Override
    public Tweet updateTweet(int id, Tweet tweet) {
        return null;
    }

    @Override
    public Tweet deleteTweet(int id) {
        return null;
    }
}

Есть идеи, что случилось?

1 Ответ

0 голосов
/ 02 сентября 2018

Проблема заключалась в том, что объект использовал поле с именем «пользователь». Изменение имени поля на другое заставило все работать.

Пользователь - зарезервированное слово в Postgresql.

...