public interface FooRepository extends PagingAndSortingRepository<Foo, Long> {
}
und natürlich ein Entity Foo.
@Entity
@Table(name="FOO")
@EntityListeners(AuditingEntityListener.class)
public class Foo implements Serializable {
private static final long serialVersionUID = 1L;
....
@NaturalId
@Column(nullable= false, length=255)
@ApiModelProperty(notes = "The name of the Foo")
protected String name;
....
}
Funktioniert alles super.
Jetzt will ich eine Funktion (zum obigen Repository) hinzufügen, was mir eine Liste aller Foo-Namen liefert. So etwa.
@Query(value = “SELECT f.name FROM Foo f”)
public List findFooNames();
Aber ich scheitere leider. Was ich bekomme ist.
Couldn't find PersistentEntity for type class java.lang.String
Ich bin sicher nicht der einzige, der das braucht. Aber irgendwie sind die Tipps rah oder sie funktionieren nicht. Z.B. ein Wrapper Entity um String bauen. Ich vermute aber, das geht irgendwie ganz einfach.
Irgendwelche Tipps? Wie geht das?
Ich bin mir nicht ganz sicher, ob die Spring Repositories genutzt werden können, um einzelne Attribute abzufragen. Ich meine, die Arbeiten immer mit Entities.
@Query("SELECT b.name FROM BatchJob b where b.id = :id")
String findAllBatchJobNames(@RequestParam(value="id") @Param("id") Long id);
“BatchJob SMSAuto”
@Query("SELECT b.name FROM BatchJob b")
String findAllBatchJobNames(@RequestParam(value="id") @Param("id") Long id);
-> Errormsg: "query did not return a unique result: 8; nested exception is javax.persistence.NonUniqueResultException:
@Query("SELECT b.name FROM BatchJob b")
List findAllBatchJobNames(@RequestParam(value="id") @Param("id") Long id);
-> Errormsg: “Couldn’t find PersistentEntity for type class java.lang.String!”
@Query("SELECT b FROM BatchJob b")
List findBatchJobNameById(@RequestParam(value="id") @Param("id") Long id);
->Ergebnisliste
Wird genau ein String zurückgeben und die where-clause entsprechend gestaltet, funktioniert es.
Wird die where Bedingung entfernt (oder so gestaltet, dass mehr kommt), dann kommt fast erwartungsgemäß die Exception. Aber es gelingt mir momentan nicht eine List von Strings zurück zu liefern. Egal ob Plain, Generics, String, Optional, etc.
Liste an sich geht aber. Wenn ich komplette Entitys statt nur den Namen-String haben will, bekomme ich das.