【问题标题】:Exception in hql executionhql执行异常
【发布时间】:2013-04-02 18:19:22
【问题描述】:

我试图将表映射到实体类并对其使用 hql 查询。我在 Eclipse 中工作,我尝试在 Hibernate 控制台中执行 HQL 查询。查询按预期给出了结果,但是当我部署我的应用程序时出现错误:

    org.hibernate.exception.SQLGrammarException:
could not initialize a collection: [com.alu.mdm.entities.firmware.FirmwareImage.properties#3014]

     ORA-00904: "PROPERTIES0_"."FIRMWARE": invalid identifier

当我看到启用 sql 的日志时,我发现查询是这样的:

select properties0_.FIRMWARE_ID as FIRMWARE4_23_1_,
properties0_.firmware as firmware1_,
properties0_.firmware as firmware19_0_,
properties0_.NAME as NAME19_0_,
properties0_.VALUE as VALUE19_0_ 
from FW_PROPERTIES properties0_ 
where properties0_.FIRMWARE_ID=?

我有两张表,一张是 FIRMWAREIMAGE,另一张是 FW_PROPERTIES,看起来像这样

@Table(name = "FIRMWARE_IMAGE",uniqueConstraints=
@UniqueConstraint(columnNames = {"IMAGE_NAME"}))
@org.hibernate.annotations.Table(appliesTo = "FIRMWARE_IMAGE")
public class FirmwareImage extends PersistentObject {

@Id
@Column(name = "ID")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="FIRMWARE_IMAGE_SEQUENCE")
private Long id;

@Column(name = "IMAGE_NAME", nullable = false)
private String name;

@OneToMany(fetch = FetchType.EAGER)
@Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN})
@JoinColumn(name="FIRMWARE_ID")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region = "com.alu.mdm.entities.firmware")
private Set<FirmwareImageProperty> properties  = new LinkedHashSet<FirmwareImageProperty>();

//一些getter和setter

我的 FW_PROPERTIES 实体类是这样的

@Entity
@Table(name="FW_PROPERTIES", uniqueConstraints=@UniqueConstraint(columnNames=       {"FIRMWARE_ID","NAME","VALUE"}))
@org.hibernate.annotations.Table(appliesTo="FW_PROPERTIES")
public class FirmwareImageProperty extends Persistence implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 5574911511734379510L;


@Id
@PrimaryKeyJoinColumns(value={@PrimaryKeyJoinColumn(name="FIRMWARE_ID"), @PrimaryKeyJoinColumn(name="NAME")})



@ManyToOne(optional=true)
@JoinColumn(name="FIRMWARE_ID" , nullable=false)
@ForeignKey(name="FK_FW_PROPERTIES_FIRMWARE_ID")
private FirmwareImage firmware;


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

@Lob
@Column(name="VALUE")
private String value;

  //Some getters and setters

我的 HQL 查询是“SELECT fw FROM FirmwareImage fw left join fw.properties as fp”

我无法弄清楚为什么会出现该异常。请有人提出解决方案。

【问题讨论】:

  • “当 ORA-00904 发生时,您必须输入一个有效的列名,因为它要么丢失要么输入无效”。你确定你有有效的列名吗?
  • 可能你没有部署最新版本。该查询在表FW_PROPERTIES 中查找FIRMWARE 列,但您没有(不再有?)这样的映射。
  • 我的表没有 FIRMWARE 列。即使在实体类中我也没有定义它。但仍在查询中,它正在考虑该列。我没有找到我做错的地方。
  • 该表在数据库端的外观如何?你能在数据库上执行desc FW_PROPERTIES并发布结果吗?

标签: java hibernate annotations hql


【解决方案1】:

例如将@annotation 移动到getter 上

private String name;

@Column(name="NAME")
public String getName(){
     return name;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    相关资源
    最近更新 更多