Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试访问现有数据库时关系不存在_Java_Postgresql_Jakarta Ee_Wildfly - Fatal编程技术网

Java 尝试访问现有数据库时关系不存在

Java 尝试访问现有数据库时关系不存在,java,postgresql,jakarta-ee,wildfly,Java,Postgresql,Jakarta Ee,Wildfly,我已经在Wildfly中设置了与数据库的连接,没有任何问题,连接正常 我正在创建一个Twitter克隆,但是当我尝试访问DB时,我收到一个错误,上面说: 原因:org.postgresql.util.psql异常:错误:关系“tweet” 不存在 JPA似乎不会自动创建模式。在另一个项目中运行类似的代码会自动创建实体模式。我不知道这里发生了什么事 我有一个基本的Tweet实体 import javax.persistence.Entity; import javax.persistence.Ge

我已经在Wildfly中设置了与数据库的连接,没有任何问题,连接正常

我正在创建一个Twitter克隆,但是当我尝试访问DB时,我收到一个错误,上面说:

原因:org.postgresql.util.psql异常:错误:关系“tweet” 不存在

JPA似乎不会自动创建模式。在另一个项目中运行类似的代码会自动创建实体模式。我不知道这里发生了什么事

我有一个基本的Tweet实体

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;
    }
}
import javax.ejb.Stateless;
导入javax.persistence.EntityManager;
导入javax.persistence.PersistenceContext;
导入javax.persistence.Query;
导入java.util.List;
@无国籍
公共类TweetDaoImpl实现TweetDao{
@持久上下文
实体管理器;
@凌驾
公共推文插入推文(推文推文){
em.persist(tweet);
返回tweet;
}
@凌驾
公共列表getUserTweets(字符串用户){
Query Query=em.createQuery(“从tweet tweet中选择tweet,其中tweet.user=:user”);
query.setParameter(“用户”,用户);
返回query.getResultList();
}
@凌驾
公共列表getAllTweets(){
Query Query=em.createQuery(“从tweet tweet中选择tweet”);
返回query.getResultList();
}
@凌驾
公共Tweet updateweet(int-id,Tweet-Tweet){
返回null;
}
@凌驾
公共推文删除推文(int-id){
返回null;
}
}

有什么问题吗?

问题是实体使用了名为“用户”的字段。将字段名更改为其他名称使一切正常


User是Postgresql中的保留字。

JPA甚至不会自动创建模式。这很奇怪。所以它基本上不存在。我在另一个项目中运行了类似的代码(有员工而不是tweets),部署后,JPA自动创建了实体模式。我不知道现在发生了什么。