Я пытался сопоставить таблицу с классом сущности и использовать для нее 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»
Я не могу понять, почему я получаю это исключение , Пожалуйста, предложите решение.
«Когда ORA-00904 происходит, необходимо ввести допустимое имя столбца, либо отсутствует, либо один недействительно». У вас есть правильное имя столбца? – kosa
Возможно, вы не использовали последнюю версию. Запрос ищет столбец 'FIRMWARE' в таблице' FW_PROPERTIES', но у вас нет (больше?) Такого сопоставления. – dcernahoschi
В моей таблице нет колонки FIRMWARE. Я не определил его даже в классе сущности. но все еще в запросе он рассматривает эту колонку. Я не понимаю, где я совершил ошибку. – user2267399