org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Неизвестный столбец в «списке полей» - PullRequest
0 голосов
/ 03 декабря 2018

Пожалуйста, помогите.Я новичок в hibernate 5 + MySQL, так что это может быть глупый сценарий.

Я пытаюсь создать очень простое приложение для социальных сетей, которое позволяет регистрироваться, входить в систему, добавлять друзей.Я получаю эту ошибку:

23:47:57.340 [http-nio-8080-exec-6] ERROR     org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Unknown column 'friends0_.User_Id' in 'field list'
    javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:149)
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157)
        at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1423)
        at com.alonso.socialnetworks.dao.UserDAO.getUserByName(UserDAO.java:29)
        at com.alonso.socialnetworks.action.LoginAction.validate(LoginAction.java:34)
        at com.opensymphony.xwork2.validator.ValidationInterceptor.doBeforeInvocation(ValidationInterceptor.java:250)
        at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:262)
        at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:49)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.doIntercept(ConversionErrorInterceptor.java:142)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:137)
        at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:99)
        at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
        at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:137)

Выдается ошибка, когда я пытаюсь создать таблицу для обработки функции добавления друзей.

Я продолжил и создал таблицу, чтобы связать пользователей сих друзья, это выглядит следующим образом:

Имя таблицы: users_users

Столбцы:

users_id - int (11)

friends_id - int (11)

Вот мой класс модели:

package com.alonso.socialnetworks.model;

import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name = "Users")
public class User {

    @Id
    @GenericGenerator(name = "inc", strategy = "increment")
    @GeneratedValue(generator = "inc")
    @Column(name = "Id")
    private Integer id;

    @Column(name = "name")
    private String userName;

    @Column(name = "password")
    private String password;

    @OneToMany(fetch=FetchType.EAGER)
    @JoinTable(name="users_users")
    @JoinColumn(name="users_id")
    private Set<User> friends;

    public Set<User> getFriends() {
        return friends;
    }

    public void setFriends(Set<User> friends) {
        this.friends = friends;
    }

    public Integer getId() {
        return id;
    }

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

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

Вот мой код, который я использую.

https://github.com/JAlonsoHdz/SocialNetworkWebApp

Что я делаю не так?Похоже, что hibernate не отображает users_users и столбцы.

1 Ответ

0 голосов
/ 05 декабря 2018

Я изменил свое сопоставление сущностей на этот подход

Вот так выглядит мой код в классе модели User:

@Entity
@Table(name = "Users")
public class User {

    @Id
    @GenericGenerator(name = "inc", strategy = "increment")
    @GeneratedValue(generator = "inc")
    @Column(name = "Id")
    private Integer id;

    @Column(name = "name")
    private String userName;

    @Column(name = "password")
    private String password;

    @ManyToMany(fetch=FetchType.EAGER)
    @JoinTable(name="users_users",
     joinColumns=@JoinColumn(name="users_Id"),
     inverseJoinColumns=@JoinColumn(name="friends_id")
    )
    private Set<User> friends;

    @ManyToMany
    @JoinTable(name="users_users",
     joinColumns=@JoinColumn(name="friends_id"),
     inverseJoinColumns=@JoinColumn(name="users_Id")
    )
    private Set<User> friendOf;

И, наконец, мне пришлосьобрабатывать исключение нулевого указателя, когда пользователь пытается добавить друга, которого не существует.И это сделало трюк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...