Ich verwende Oracle als Datenbank und Spring Data für ein Projekt mit jBoss AS.JPA-Abfrage mit GROUP BY im Frühjahr Daten zur Oracle-Datenbank
Eine einfache Abfrage mit einer GROUP BY funktioniert nicht.
Dies ist der Repository-Code:
public interface UseCaseRepository extends JpaRepository<UseCase, Long> {
@Query("SELECT uc.channel FROM UseCase uc WHERE uc.activity = ?1 GROUP BY uc.channel")
public List<Channel> getUseCaseChannelByActivity(Activity activity);
[...]
Der Fehler unter
2016-06-29 17:22:12,780 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http--0.0.0.0-443-3) SQL Error: 979, SQLState: 42000
2016-06-29 17:22:12,780 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (http--0.0.0.0-443-3) ORA-00979: not a GROUP BY expression
Die gleiche Abfrage mit einer MySQL-Datenbank angezeigt wird kein Problem hat.
Dies sind die Einheiten
@Entity
@Table(name="USE_CASE")
@NamedQuery(name="UseCase.findAll", query="SELECT u FROM UseCase u")
public class UseCase implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="USE_CASE_ID")
private long useCaseId;
//uni-directional many-to-one association to Activity
@ManyToOne
@JoinColumn(name="ACTIVITY_ID")
private Activity activity;
//uni-directional many-to-one association to Channel
@ManyToOne
@JoinColumn(name="CHANNEL_ID")
private Channel channel;
//uni-directional many-to-one association to PushTool
@ManyToOne
@JoinColumn(name="PUSH_TOOL_ID")
private PushTool pushTool;
//uni-directional many-to-one association to Tool
@ManyToOne
@JoinColumn(name="TOOL_ID")
private Tool tool;
//uni-directional many-to-many association to DataSource
@ManyToMany
@JoinTable(
name="USE_CASE_DATA_SOURCE"
, joinColumns={
@JoinColumn(name="USE_CASE_ID")
}
, inverseJoinColumns={
@JoinColumn(name="DATA_SOURCE_ID")
}
)
private List<DataSource> dataSources;
[...]
@Entity
@NamedQuery(name="Activity.findAll", query="SELECT a FROM Activity a")
public class Activity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="ACTIVITY_ID")
private long activityId;
private String attribute;
@Column(name="\"TYPE\"")
private String type;
[...]
@Entity
@NamedQuery(name="Channel.findAll", query="SELECT c FROM Channel c")
public class Channel implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="CHANNEL_ID")
private long channelId;
private String attribute;
@Column(name="\"TYPE\"")
private String type;
[...]
Jede Idee, wie zu lösen? Danke
Dies ist eine schlechte oder irrelevante Frage sein kann, aber was ist 'WHERE uc.activity =? 1 'gemeint? Ich hätte erwartet, "WHERE ucactivity =?" Zu sehen, mit nur einem einzigen Fragezeichen, das den Parameter bezeichnet. –
ich denke, es wurde hier beantwortet http://stackoverflow.com/questions/20074562/group-by-without-aggregate-function –
Sie brauchen wahrscheinlich nicht einmal eine Gruppe von Abfrage, in der Tat, wenn Sie eine Auflösung sind Kanal für Aktivität würden Sie 'SELECT distinct (uc.channel) FROM UseCase uc WHERE uc.activity =?' –