У меня есть проект весенней загрузки (v2.0.2.RELEASE
).У меня есть две сущности Aliment
и Freezer
.Aliment.freezer_id
является внешним ключом к Freezer.Id
.
В моем алименте CrudRepository
Я использую @Query
для методов для написания JPA sql:
@Query("select distinct al from Aliment al WHERE al.freezer_id = :freezerId")
Set<Aliment> findFreezerContent(@Param("freezerId")Long freezerId);
Я получаю следующую ошибкучто кажется довольно ясным
Причина: java.lang.IllegalArgumentException: org.hibernate.QueryException: не удалось разрешить свойство: freezer_id из: мой запрос
Я явно устанавливаю имя столбца равным freezer_id
посредством аннотации @JoinColumn(name="freezer_id", referencedColumnName="id")
Я использую postgresql и вижу в pg_admin, что столбец создается hibernate.
Частькод указан ниже:
Aliment.java
@Entity
public class Aliment extends EntityRoot {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="freezer_ida", referencedColumnName="id")
private Freezer freezer;
@Column(name="name")
private String name;
@Column(name="category")
private String category;
@Column(name="iconic_font_name")
private String iconicFontName;
@Column(name="quantity")
private Double quantity;
@Column(name="quantity_unit")
private String quantityUnit;
@Column(name="stored_date")
private Date storedDate;
@Column(name="expiration_date")
private Date expirationDate;
//other methods
}
Freezer.java
@Entity
public class Freezer extends EntityRoot {
@OneToMany(mappedBy = "freezer", cascade= CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
private Set<Aliment> content;
@Column(name="name")
private String name;
//other methods
}
AlimentRepository.java
public interface AlimentRepository extends CrudRepository<Aliment, Long> {
@Query("select distinct al from Aliment al WHERE al.freezer_id = :freezerId")
Set<Aliment> findFreezerContent(@Param("freezerId")Long freezerId);
}
EntityRoot.java
@MappedSuperclass
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class EntityRoot {
@Id @GeneratedValue @Column(name="id")
protected Long id;
@Generated(value = GenerationTime.INSERT)
@Temporal(value=TemporalType.TIMESTAMP)
@Column(name="creation_timestamp", insertable=false)
protected Date creationTimestamp;
@Generated(value = GenerationTime.ALWAYS)
@Temporal(value=TemporalType.TIMESTAMP)
@Column(name="update_timestamp")
protected Date updateTimestamp;
//other methods
}
Моей целью было не использовать join
.Возможно ли это?