一对多和一对多连续映射的休眠条件查询 - 表或视图不存在

Posted

技术标签:

【中文标题】一对多和一对多连续映射的休眠条件查询 - 表或视图不存在【英文标题】:Hibernate Critera Query for One to Many and one to many continous mapping - table or view doesnt exist 【发布时间】:2016-02-15 09:40:28 【问题描述】:

需要你的帮助。

我正在使用带有注释的 Hibernate 3.6,并且有 3 个带有映射的表/类。 A 类与 B 类映射为 oneToMany,B 类与 C 类映射为 OneToOne。我正在尝试插入和加载值。

如果我直接调用 session 的 .get 方法,它会成功返回包含所有映射的对象。但是当我使用条件或 hql 添加一些条件时,它会给我一个错误 ORA-00942: table or view does not exist (Using oracle)。

当我调用 .get 方法时,它不会生成任何 sql,但使用 Criteria 和 HQL 它会生成插入 SQL。我不明白为什么在获取数据时插入查询。

这里是日志:

`Hibernate: insert into A values(???) 
Hibernate: insert into B values(???)
Hibernate: insert into C values(???)
Hibernate: insert into A_B (A_ID, bProperty_ID)
org.hibernate.engine.jdbc.spi.SqlExceptionHelper(line 146): ORA-00942: table or view does not exist`


Class A 
  @Id 
  @Column(name = "A_ID",unique = true, nullable = false)
  int id;

  @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER) //lazy tried
  private Set<B> transactionDetails = new HashSet<B>();


Class B 

  @GenericGenerator(name = "generator", strategy = "foreign",parameters =     @Parameter(name = "property", value = "aProperty"))
  @Id
  @GeneratedValue(generator = "generator")
  @Column(name = "B_ID",unique = true, nullable = false)
  int id;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "B_ID", nullable = false, insertable=false,   updatable=false)
  private  A aProperty;

  @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.LAZY)
  @JoinColumn(name = "B_ID")
  private C c;


Class C 
  @GenericGenerator(name = "generator", strategy = "foreign",parameters =     @Parameter(name = "property", value = "bProperty"))
  @Id
  @GeneratedValue(generator = "generator")
  @Column(name = "C_ID",unique = true, nullable = false)
  int id;

  @OneToOne(fetch = FetchType.LAZY)
  @PrimaryKeyJoinColumn
  private B b;

有人知道它为什么给出错误“表或视图不存在”吗?当我使用有/无条件的标准或 hql 时。

    Criteria crQuery = getSession().createCriteria(A.class);

上面这行给出了错误。好像我在哪里尝试 getSession().get("idFromDB");

没有错误,运行良好。

【问题讨论】:

【参考方案1】:

尝试为类添加注释:

@Entity
@Table(name = "<your sql table name>")
Class A 
  ...

【讨论】:

以上是关于一对多和一对多连续映射的休眠条件查询 - 表或视图不存在的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate映射关系:一对一对多和多对多

Hibernate自身一对多和多对多关系映射

hibernate入门三之关联映射(一对多和多对一)

MyBatis一对多和一对一xml文件的配置

mybatis映射 一对一,一对多,多对多高级映射

SpringBoot使用Mybatis注解进行一对多和多对多查询