я мой проект, я должен классаOneToMany, org.hibernate.QueryException: не удалось разрешить свойство
@Entity
@Table(name = "asset")
public class Asset extends BaseEntity {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "last_position")
private Position lastPosition;
/**contructor, getter, setter method, other field etc..**/
}
и другой класс
@Entity
@Table(name = "position")
@EntityListeners(EntityChangeCallback.class)
public class Position extends BaseEntity {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy="lastPosition")
private List<Asset> assets;
/**contructor, getter, setter method, other field etc..**/
}
Доступ к данным объекта, как этот
public abstract class BaseDaoImp<E extends Indexable> implements BaseDao<E> {
@PersistenceContext
protected EntityManager em;
/**some thing else**/
@SuppressWarnings("unchecked")
public List<E> list() {
Query qry = em.createQuery("from " + getType().getSimpleName() + " u");
return qry.getResultList();
}
}
, когда я запускаю код. Я получаю ошибку
Вызванный: java.lang.IllegalArgumentException: org.hibernate.QueryException: не удалось разрешить свойство: lastPositionId из: com.abc.server.db.entity.Asset [ОТ ком .abc.server.db.entity.Position pos WHERE pos.deviceId IN ('100 000000001000', '100000000001001', '100000000001002') И pos.id IN (ВЫБРАТЬ asset.lastPositionId FROM com.tma.ats.am .server .db.entity.Asset актив)]
Я нашел проблему в спящем режиме генерации запроса с полем name lastPositionId Вместо lastPosition. Я меняю имя поля из lastPosition на lastPositionId. Все работает Хорошо. Но я читал много примеров в Интернете и из своего собственного проекта. Все остальные поля могут отображать @ManyToOne Ok, и им не нужен идентификатор Postfix. Как я могу сделать над кодом работу с именем поля lastPosition (не lastPositionId)? Благодарим за помощь.