I'm using Oracle as database and Spring Data on a project with jBoss AS.
A simple query with a GROUP BY doesn't work.
This is the 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);
[...]
The error is shown below
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
The same query with a MySQL database has no problem.
These are the entities
@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;
[...]
Any idea how to solve? Thanks