Java 字段列表中的JPA未知列

Java 字段列表中的JPA未知列,java,mysql,spring,hibernate,jpa,Java,Mysql,Spring,Hibernate,Jpa,我在住宿和预订课程之间有一个关系,并且我在预订表中设置了一个外键 ALTER TABLE `project`.`booking` ADD INDEX `fk_accId_fk_idx` (`accommodation` ASC); ALTER TABLE `project`.`booking` ADD CONSTRAINT `fk_accId_fk` FOREIGN KEY (`accommodation`) REFERENCES `project`.`accommodation`

我在
住宿
预订
课程之间有一个关系,并且我在预订表中设置了一个外键

ALTER TABLE `project`.`booking` 
ADD INDEX `fk_accId_fk_idx` (`accommodation` ASC);
ALTER TABLE `project`.`booking` 
ADD CONSTRAINT `fk_accId_fk`
  FOREIGN KEY (`accommodation`)
  REFERENCES `project`.`accommodation` (`id`)
  ON DELETE NO ACTION
  ON UPDATE NO ACTION;
住宿级别:

@Entity
  ....
public class Accommodation implements Serializable {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "id", unique = true, nullable = false)
  private BigInteger id;

  @OneToMany(mappedBy = "accommodation", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
  @JsonManagedReference
  private List < Booking > bookings;
  ......getters setters
}
当我执行列表住宿查询时,我在字段列表错误中得到未知列

javax.persistence.PersistenceException:org.hibernate.exception.sqlgrammareexception:无法提取具有根本原因的结果集] com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:字段列表中的未知列“bookings7_2;.bookings”


即使我在表中设置了关系并定义了外键,我出现此错误的原因是什么?

尝试在JPA中手动定义联接表映射。删除您的模式,让JPA创建您的表:

住宿舱

@OneToMany(mappedBy = "accommodation", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
@JsonManagedReference
private List < Booking > bookings;

尝试在db和entity类中将列名更改为小写

我遇到了这样的情况,我通过更改字段在查询中的位置来解决它。看起来这是一个MySQL错误,就像(或与)这篇文章中提到的一样:


这个MySQL错误的描述提到了一个类似的解决方案:“我发现,通过将该字段在表中的位置与另一个字段交换,它工作正常。”

一切看起来都设计得很好。你确定你有
住宿
预订
对象的接受者和接受者吗?@alican.balik你是对的。。。谢谢,我已经解决了,但是根据你的回答,我有一个问题。你放弃你的模式让JPA创建是什么意思?JPA自动创建之前的流程是什么?如果数据库中不存在该表,我会不会出错?我是否需要为类中的每个变量设置
@Column()
注释,否则JPA如何知道列名?Hibernate可以根据实体和映射自动生成数据库表。查找Hibernate的hbm2ddl属性,如果将其设置为“创建”,它会自动为您生成数据库表。查找hbm2ddl的其他属性。@Malena不能首先使用sql命令和“drop schema public CASCADE;”删除您的架构。然后在properties下查看persistence.xml。这里添加“”@Malena T您不需要向每个字段添加
@Column
,因为您已经声明您使用
@Entity
初始化,hibernate会将每个java字段解释为数据库中的表列。但是注释
@Transient
将忽略作为db列的字段。感谢您的详细回答。我现在明白了。此外,如果您想查看,我还有一个查询问题:
@OneToMany(mappedBy = "accommodation", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
@JsonManagedReference
private List < Booking > bookings;
@ManyToOne(fetch = FetchType.EAGER)
@JoinTable(name = "accommodation_booking_join_table", 
           joinColumns = {@JoinColumn(name="booking_id")},
           inverseJoinColumns = @JoinColumn(name = "accommodation_id"))
@JsonBackReference
private Accommodation accommodation;