2013-04-10 2 views
0

Я пытался сопоставить таблицу с классом сущности и использовать для нее hql-запросы. Я работаю в Eclipse, и я попытался выполнить запросы HQL в консоли 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>(); 

// некоторые добытчиками и сеттеров

Мой FW_PROPERTIES класс сущностей, как

@Entity 
@Table(name="FW_PROPERTIES", [email protected](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 FROM ФВ FirmwareImage Fw соединения слева fw.properties как FP»

Я не могу понять, почему я получаю это исключение , Пожалуйста, предложите решение.

+0

«Когда ORA-00904 происходит, необходимо ввести допустимое имя столбца, либо отсутствует, либо один недействительно». У вас есть правильное имя столбца? – kosa

+0

Возможно, вы не использовали последнюю версию. Запрос ищет столбец 'FIRMWARE' в таблице' FW_PROPERTIES', но у вас нет (больше?) Такого сопоставления. – dcernahoschi

+0

В моей таблице нет колонки FIRMWARE. Я не определил его даже в классе сущности. но все еще в запросе он рассматривает эту колонку. Я не понимаю, где я совершил ошибку. – user2267399

ответ

0

Move @annotation к добытчикам, например

private String name; 

@Column(name="NAME") 
public String getName(){ 
    return name; 
} 
Смежные вопросы