Java 未映射JPQL表名

Java 未映射JPQL表名,java,spring-boot,jpql,Java,Spring Boot,Jpql,我对Spring Boot比较陌生,这个问题让我抓狂。我有两个具有多对多关系的表、用户和事件。我的目标是获取用户尚未加入且未处于用户主状态的所有事件。多对多中间表由系统生成。用户的模型是 包com.starxfighter.events.models import java.util.Date; import java.util.List; import javax.persistence.*; import javax.validation.constraints.*; @Entity @

我对Spring Boot比较陌生,这个问题让我抓狂。我有两个具有多对多关系的表、用户和事件。我的目标是获取用户尚未加入且未处于用户主状态的所有事件。多对多中间表由系统生成。用户的模型是 包com.starxfighter.events.models

import java.util.Date;
import java.util.List;

import javax.persistence.*;
import javax.validation.constraints.*;

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

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Size(min = 2, message="First Name must be longer than two characters")
private String fname;
@Size(min = 2, message="Last Name must be longer than two characters")
private String lname;
@Email(message = "Email must be valid")
private String email;
@Size(min = 2, message="City must be longer than two chracters")
private String city;
@NotNull(message = "State can not be left blank")
private String state;
@Size(min = 5, message="Password must be greated than 5 characters")
private String password;
@Transient
private String passconf;
@Column(updatable=false)
private Date createdAt;
private Date updatedAt;

@OneToMany(mappedBy="host", fetch=FetchType.LAZY)
private List<Event> eventHost;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
        name = "users_events",
        joinColumns = @JoinColumn(name="user_id"),
        inverseJoinColumns = @JoinColumn(name="event_id")
)
private List<Event> events;
import java.util.Date;
import java.util.List;

import javax.persistence.*;
import javax.validation.constraints.*;


@Entity
@Table(name="events")
public class Event {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Size(min = 2, message="Event name must be greater than 2 characters")
private String name;
@Future
private Date eventDate;
@Size(min = 2, message="Location must be longer than 2 characters")
private String location;
@Column(updatable=false)
private Date createdAt;
private Date updatedAt;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name= "user_id")
private User host;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
        name="users_events",
        joinColumns=@JoinColumn(name="event_id"),
        inverseJoinColumns = @JoinColumn(name="user_id")
)
private List<User> users;

@OneToMany(mappedBy="event", fetch=FetchType.LAZY)
private List<Comment> comments;

public Event() {
}
import java.util.Date;
导入java.util.List;
导入javax.persistence.*;
导入javax.validation.constraints.*;
@实体
@表(name=“users”)
公共类用户{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@大小(最小值=2,消息=“名字必须超过两个字符”)
私有字符串fname;
@大小(最小值=2,消息=“姓氏必须超过两个字符”)
私有字符串名称;
@电子邮件(message=“电子邮件必须有效”)
私人字符串电子邮件;
@大小(最小值=2,消息=“城市必须超过两个字符”)
私人城市;
@NotNull(message=“状态不能为空”)
私有字符串状态;
@大小(最小值=5,消息=“密码必须大于5个字符”)
私有字符串密码;
@短暂的
私有字符串passconf;
@列(可更新=false)
私人日期创建日期;
私人日期更新日期;
@OneToMany(mappedBy=“host”,fetch=FetchType.LAZY)
私有列表事件主机;
@ManyToMany(fetch=FetchType.LAZY)
@可接合(
name=“users\u事件”,
joinColumns=@JoinColumn(name=“user\u id”),
inverseJoinColumns=@JoinColumn(name=“event\u id”)
)
私人列表活动;
事件的模型是 包com.starxfighter.events.models

import java.util.Date;
import java.util.List;

import javax.persistence.*;
import javax.validation.constraints.*;

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

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Size(min = 2, message="First Name must be longer than two characters")
private String fname;
@Size(min = 2, message="Last Name must be longer than two characters")
private String lname;
@Email(message = "Email must be valid")
private String email;
@Size(min = 2, message="City must be longer than two chracters")
private String city;
@NotNull(message = "State can not be left blank")
private String state;
@Size(min = 5, message="Password must be greated than 5 characters")
private String password;
@Transient
private String passconf;
@Column(updatable=false)
private Date createdAt;
private Date updatedAt;

@OneToMany(mappedBy="host", fetch=FetchType.LAZY)
private List<Event> eventHost;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
        name = "users_events",
        joinColumns = @JoinColumn(name="user_id"),
        inverseJoinColumns = @JoinColumn(name="event_id")
)
private List<Event> events;
import java.util.Date;
import java.util.List;

import javax.persistence.*;
import javax.validation.constraints.*;


@Entity
@Table(name="events")
public class Event {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Size(min = 2, message="Event name must be greater than 2 characters")
private String name;
@Future
private Date eventDate;
@Size(min = 2, message="Location must be longer than 2 characters")
private String location;
@Column(updatable=false)
private Date createdAt;
private Date updatedAt;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name= "user_id")
private User host;

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
        name="users_events",
        joinColumns=@JoinColumn(name="event_id"),
        inverseJoinColumns = @JoinColumn(name="user_id")
)
private List<User> users;

@OneToMany(mappedBy="event", fetch=FetchType.LAZY)
private List<Comment> comments;

public Event() {
}
import java.util.Date;
导入java.util.List;
导入javax.persistence.*;
导入javax.validation.constraints.*;
@实体
@表(name=“events”)
公开课活动{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@大小(最小值=2,消息=“事件名称必须大于2个字符”)
私有字符串名称;
@未来
私人日期事件日期;
@大小(最小值=2,消息=“位置必须超过2个字符”)
私有字符串位置;
@列(可更新=false)
私人日期创建日期;
私人日期更新日期;
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“user\u id”)
专用用户主机;
@ManyToMany(fetch=FetchType.LAZY)
@可接合(
name=“users\u事件”,
joinColumns=@JoinColumn(name=“event_id”),
inverseJoinColumns=@JoinColumn(name=“user\u id”)
)
私人名单用户;
@OneToMany(mappedBy=“event”,fetch=FetchType.LAZY)
私人名单评论;
公共活动(){
}
正在进行查询调用的我的存储库是:

import com.starxfighter.events.models.Event;

@Repository
public interface EventRepository extends CrudRepository<Event, Long> {

@Query("SELECT e FROM Users_events ue JOIN Events e WHERE ue.user_id <> ?1    AND e.state <> ?2")
List<Event> getOutOfState(Long id, String state);

@Query("SELECT e FROM Event e WHERE e.host = ?1")
List<Event> eventsHostedByUser(Long id);

@Query("SELECT e FROM Users_Events ue JOIN Events e WHERE ue.user_id = ?1")
List<Event> eventsJoinByUser(Long id);

@Query("SELECT e from Users_Events ue JOIN Events e WHERE ue.user_id <> ?1")
List<Event> eventsNotByUser(Long id);
import com.starxfighter.events.models.Event;
@存储库
公共接口事件存储库扩展了Crudepository{
@查询(“从用户\事件ue加入事件e中选择e,其中ue.user\ id?1和e.state?2”)
列表getOutOfState(长id,字符串状态);
@查询(“从事件e中选择e,其中e.host=?1”)
列出eventsHostedByUser(长id);
@查询(“选择e FROM Users\u Events ue JOIN Events e,其中ue.user\u id=?1”)
列出事件JoinByUser(长id);
@查询(“从用户\事件ue加入事件e中选择e,其中ue.user\ id?1”)
列表eventsNotByUser(长id);
}

确切的错误消息是:org.hibernate.hql.internal.ast.querysyntaxeption:Users\u events未映射[从Users\u events ue JOIN events e中选择e,其中ue.user\u id?1和e.state?2]


任何人都可以解释一下这个问题。谢谢

我想你刚刚用错误的名称设置了mappedBy,spring找不到名称“host”

在此代码中

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name= "user_id")
private User host;
改为

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name= "host") <-- change this line
private User host;
@ManyToOne(fetch=FetchType.LAZY)

@JoinColumn(name=“host”)Users\u事件是一个联接表,而不是一个
实体,因此您无法从中进行选择。
从事件中选择e join e.Users eu where eu.id?
或类似的内容。