у меня есть
@MappedSuperclass
public class AbstractFoo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
...
и у меня есть объект, наследующий / расширяющий его:
@Entity
@Table(name = "Foo")
public class FooSomething extends AbstractFoo {
private static final long serialVersionUID = 1L;
@ManyToOne
@JoinColumn(name = "fk_something")
private Something something;
...
fk_something может иметь значение null.
Как определить класс сущности, который должен знать, что он должен получать только Foos, где fk_something не равно нулю?
Я ищу что-то вроде этого:
@Entity
@Table(name = "Foo")
@Query(SELECT *[fields of AbstractFoo + FooSomething] from <schema>.foo where fk_something is not null)
public class FooSomething extends AbstractFoo {
...
При написании этого вопроса я подумал о простом подходе, чтобы просто определять каждый раз, когда я получаю Foos через FooSomethingRepository, чтобы просто указать в запросе, что «что-то» не равно нулю.
Тем не менее мне интересно узнать, есть ли более формальный способ определить это на уровне Entity Class.
Спасибо
В JPA нет ничего стандартного для этого. Вы можете использовать представление, или вы можете использовать проприетарную функцию вашего движка JPA. Но вы не сказали, что есть.
Спасибо, что обратились к моему вопросу, @ Billy Frost
Спасибо, что обратились к моему вопросу. @Billy Frost - я имел в виду что-то вроде Query, а не то, что существует ... конечно, наиболее близким к тому, что я искал, был NamedQuery.
@JB Nizet написал: «В JPA нет ничего стандартного для этого» - этот ответ меня удовлетворяет. Есть ли способ выбрать ваш комментарий в качестве ответа на мой вопрос?
@Query- это не JPA API, поэтому понятия не имею, что он там делает. Вы просто пишете запрос JPQL для объектов типаFooSomething, где это поле не равно нулю. И в чем в этом трудность? Вы можете определить это в именованном запросе, если хотите, чтобы он был жестко запрограммирован статически.