Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 未找到我的查询的Hibernate实体_Java_Hibernate_Jakarta Ee - Fatal编程技术网

Java 未找到我的查询的Hibernate实体

Java 未找到我的查询的Hibernate实体,java,hibernate,jakarta-ee,Java,Hibernate,Jakarta Ee,我有一个实体,有四个多对多协会: @Entity @Table(name = "userInfo") @NamedQueries({ @NamedQuery(name = "getFullUser", query = "select u " + " from UserInfo u " + " join fetch u.userImage ui " + " join fetch u

我有一个实体,有四个多对多协会:

   @Entity
@Table(name = "userInfo")
@NamedQueries({
        @NamedQuery(name = "getFullUser", query = "select u " +
                " from UserInfo u " +
                " join fetch u.userImage ui " +
                " join fetch u.logInfo " +
                " join fetch u.userQuestions " +
                " join fetch u.userPostsComments " +
                " join fetch u.userPosts  " +
                " join fetch u.answers  " +
                " where u.userId = :id")
})
public class UserInfo {

    public static final String GET_SMALL_USER = "getSmallUser";
    public static final String GET_COMMON_USER = "getCommonUser";
    public static final String GET_FULL_USER = "getFullUser";
    public static final String DELETE_USER = "deleteUser";
    public static final String FIND_USERS = "findUsers";
    public static final String GET_USERS_BY_BIRTHDATE = "getUsersByBirthDate";
    public static final String GET_USERS_EMAILS_BY_DATE = "getUsersEmailsByDate";
    public static final String CHECK_USER = "checkUser";

    private long userId;
    private String email;
    private String firstName;
    private String lastName;
    private long rating;
    private Date createDate;
    private java.sql.Date birthDate;
    private List<Questions> userQuestions;
    private List<PostsComments> userPostsComments;
    private List<PostsInfo> userPosts;
    private List<Answer> answers;
    private UserImages userImage;
    private LogInfo logInfo;

    public UserInfo(){}

    public UserInfo(String email, String firstName, String lastName, java.sql.Date birthDate){
        this.email = email;
        this.firstName = firstName;
        this.lastName = lastName;
        this.birthDate = birthDate;
    }


    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_id", unique = true, nullable = false)
    public long getUserId() {
        return userId;
    }

    @Basic
    @Column(name = "email")
    public String getEmail() {
        return email;
    }

    @Basic
    @Column(name = "firstName")
    public String getFirstName() {
        return firstName;
    }

    @Basic
    @Column(name = "lastName")
    public String getLastName() {
        return lastName;
    }

    @Basic
    @Column(name = "rating")
    public long getRating() {
        return rating;
    }

    @Basic
    @Column(name = "createDate")
    @Temporal(TemporalType.DATE)
    public Date getCreateDate() {
        return createDate;
    }

    @OneToMany(mappedBy = "userInfo", cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.LAZY)
    @OrderColumn
    public List<Questions> getUserQuestions() {
        return this.userQuestions;
    }

    @OneToMany(mappedBy = "userInfo", cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.LAZY)
    @OrderColumn
    public List<PostsComments> getUserPostsComments() {
        return this.userPostsComments;
    }

    @OneToMany(mappedBy = "userInfo", cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
    @OrderColumn
    public List<PostsInfo> getUserPosts() {
        return this.userPosts;
    }

    @OneToMany(mappedBy = "userInfo", cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
    @OrderColumn
    public List<Answer> getAnswers() {
        return this.answers;
    }

    @OneToOne(cascade = CascadeType.ALL, mappedBy = "userInfo", fetch = FetchType.EAGER, orphanRemoval = true)
    public UserImages getUserImage() {
        return userImage;
    }

    @OneToOne(fetch = FetchType.LAZY, optional = false, mappedBy = "userInfo",
    cascade = CascadeType.ALL)
    public LogInfo getLogInfo() {
        return logInfo;
    }

    @Column(name = "birthDate", nullable = false)
    public java.sql.Date getBirthDate() {
        return birthDate;
    }

}
并引发此异常:

Exception in thread "main" javax.persistence.NoResultException: No entity found for query
at org.hibernate.query.internal.AbstractProducedQuery.getSingleResult(AbstractProducedQuery.java:1555)
at ru.projects.prog_ja.dao.Hibernate.HibernateUserDAOImpl.getFullUser(HibernateUserDAOImpl.java:72)
at TestMain.run(TestMain.java:56)
at TestMain.main(TestMain.java:20)
虽然我在表中有这个实体,但当我删除最后4个连接集合的连接回迁时,所有这些都可以正常工作


我不明白我的错误在哪里,请帮助我

您正在查询中使用内部联接。只有当每个联接表都有数据时,才会得到结果。这意味着您的查询只会在您的用户有:userImage、logInfo、userQuestions

下面的示例显示了3个表。只有user1user2在所有表中都有条目。但是user3在LOGDATA表中没有条目

USERTABLE
userid  name        age
user1   Peter       20
user2   Hartmut     60
user3   Waltraud    85

LOGTABLE
userid  logtext
user1   uploaded data
user2   posted message

POSTABLE
userid  message subject
user1   Hello World javascript
user2   Hello Foo   java
user3   Old World   cobol
如果使用内部联接联接所有表:

SELECT * FROM USERDATA
INNER JOIN POSTDATA ON USERDATA.userid = POSTDATA.userid
INNER JOIN LOGDATA ON USERDATA.userid = LOGDATA.userid
您将获得:

userid  name    age userid  message     subject     userid  logtext
user1   Peter   20  user1   Hello World javascript  user1   uploaded data
user2   Hartmut 60  user2   Hello Foo   java        user2   posted message
对于您的用例,您应该使用外部连接。对于exmaple查询:

SELECT * FROM USERDATA
FULL OUTER JOIN POSTDATA ON USERDATA.userid = POSTDATA.userid
FULL OUTER JOIN LOGDATA ON USERDATA.userid = LOGDATA.userid
将导致:

userid  name        age userid  message     subject     userid  logtext
user1   Peter       20  user1   Hello World javascript  user1   uploaded data
user2   Hartmut     60  user2   Hello Foo   java        user2   posted message
user3   Waltraud    85  user3   Old World   cobol       NULL    NULL

可能其中一个连接返回空数据,因此您的查询不会返回任何数据。
SELECT * FROM USERDATA
FULL OUTER JOIN POSTDATA ON USERDATA.userid = POSTDATA.userid
FULL OUTER JOIN LOGDATA ON USERDATA.userid = LOGDATA.userid
userid  name        age userid  message     subject     userid  logtext
user1   Peter       20  user1   Hello World javascript  user1   uploaded data
user2   Hartmut     60  user2   Hello Foo   java        user2   posted message
user3   Waltraud    85  user3   Old World   cobol       NULL    NULL