Я видел несколько вопросов по этому поводу, но я не могу получить решение моей проблемы.Hibernate org.hibernate.hql.ast.QuerySyntaxException ошибка
У меня есть следующий PositionHistory
объект объявлен ...
@Entity
@Table(name = "position_history")
@Cache (usage=CacheConcurrencyStrategy.READ_WRITE)
@AttributeOverride (name="id", column = @Column(name=PositionHistory.PRIMARY_KEY))
public class PositionHistory extends AbstractPersistable {
public static final String PRIMARY_KEY = "s_posn_history_id";
public static final String KEY = "positionHistory";
public static final String KEY_DATE = "date";
public static final String KEY_COMMENT = "comment";
// String field length definitions
public static final int LENGTH_COMMENTS = 1000;
// Instance Variables
private Date date;
private String comment;
@Column(name = "d_date", nullable = false)
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
@Column(name = "t_comment", length = LENGTH_COMMENTS)
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
// hashCode()
// equals()
// toString()
}
И в PositionHistoryDaoImp
Я пытаюсь удалить некоторые строки ...
public void deletePositionHistory(Long positionId) {
getSession().createQuery("delete from position_history a where a.position_id=:id")
.setParameter("id", positionId).executeUpdate();
}
Когда я называю deletePositionHistory
я получаю следующее ошибка ...
ERROR a.g.q.d.v.s.c.CommandProcessorImpl:75 - org.hibernate.hql.ast.QuerySyntaxException: position_history is not mapped
Как вы можете видеть, та ble уже отображается в объекте PositionHisotry
, а PositionHistoryDaoImp
расширяет объект.
Что мне не хватает или что-то не так?
Ваша помощь очень ценится.
спасибо.
Position
Entity ...
@Entity
@Table(name = "position")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@AttributeOverride(name = "id", column = @Column(name = Position.PRIMARY_KEY))
public class Position extends AbstractPersistableEffective {
...
public static final String PRIMARY_KEY = "s_posn_id";
public static final String KEY_ID = "positionId";
private List<PositionHistory> history = new ArrayList<PositionHistory>();
...
@OneToMany(fetch = FetchType.LAZY)
@Cascade({CascadeType.ALL, CascadeType.DELETE_ORPHAN})
@JoinColumn(name = Position.PRIMARY_KEY)
@IndexColumn(name = AbstractPersistable.INDEX_COLUMN)
public List<PositionHistory> getHistory() {
return history;
}
public void setHistory(List<PositionHistory> history) {
this.history = history;
}
}
Большое спасибо за этот @Perception. Теперь предложение where терпит неудачу, поскольку 'a.position_id' не найден. «Position_id» является внешним ключом для позиции с повторной связью OneToMany. В позиции PositionHistory нет объявления для 'position_id', поскольку он обрабатывается спящим я полагаю. Как правильно передать идентификатор позиции в предложении where? – neo108
Он должен соответствовать имени свойства в вашей сущности (в отличие от имени столбца в вашем db). Я предполагаю, что это называется «positionId». – Perception
Спасибо. Я отдам его. @Perception: Очень ценю вашу помощь. – neo108