javax.persistence.PersistenceException: java.util.concurrent.ExecutionException: javax.persistence.PersistenceException: Query threw SQLException:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{pp_table}value limit 40' at line 1 Bind values:[12345678-1234-1234-1234-12345678] Query was:select distinct t0.id c0, t0.amount c1 from ps_view t0 join pp_table u1 on u1.id = t0.id join pp_table_to_ww_table u2z_ on u2z_.pp_id = u1.id join ww_table u2 on u2.id = u2z_.ww_id where (1 = 1 and u2.id = ? ) order by ${pp_table}value limit 40
at com.avaje.ebeaninternal.server.query.LimitOffsetPage.getList(LimitOffsetPage.java:64) at com.avaje.ebeaninternal.server.query.LimitOffsetPagingQuery.get(LimitOffsetPagingQuery.java:111) at com.avaje.ebeaninternal.server.query.LimitOffsetList.get(LimitOffsetList.java:49) ...@Entity@Table(name = "ps_view")public class PsViewAggregate extends BaseEntity { ... @OneToOne @JoinColumn(name = "id", referencedColumnName = "id") private PP pp; ... //Getters + Setters//}
@Entity@Table(name = "pp_table")public class PP { ... @Id @Column(name = "id") private UUID id; ... @JoinTable(name = "pp_table_to_ww_table", joinColumns = {@JoinColumn(name = "pp_id", referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name = "ww_id", referencedColumnName = "id")}) @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) private List<WW> wwList = new ArrayList<>(); ... //Getters + Setters//}
@Entity@Table(name = "ww_table")public class WW { ... @Id @Column(name = "id") private UUID id; ... //Getters + Setters//}select t0.id c0, t0.amount c1 from ps_view t0 where 1 = 1 limit 40;
...PP pp = ...;WW ww = ...;String propertyName = PsViewAggregate_.get(PP_.wwList).toString(); // = "pp.wwList"...Expression expression = Expr.and( Expr.raw("1 = 1"), Expr.eq(propertyName, ww));...query.where(expression);...OrderBy<PsViewAggregate> orderby = new OrderBy<>("pp_table.value")...query.setOrderBy(orderBy);...Unfortunately if I add an OrderBy object to the Query like this:Then the already seen sql code with syntax error will be generated:...OrderBy<PsViewAggregate> orderby = new OrderBy<>("pp_table.value")...query.setOrderBy(orderBy);...The "${pp_table}" string should be converted to "u1." string, but it does not occur for some reason.
@Entity@Table(name = "pp_table")public class PP { ... @Id @Column(name = "id") private UUID id;
@Basic(optional = false) @Column(name = "name", length = 100, nullable = true) private String name; @Basic(optional = false) @Column(name = "value", length = 100, nullable = false) private String value; @JoinTable(name = "pp_table_to_ww_table", joinColumns = {@JoinColumn(name = "pp_id", referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name = "ww_id", referencedColumnName = "id")}) @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) private List<WW> wwList = new ArrayList<>(); ... //Getters + Setters//}...String column01 = PsViewAggregate_.pp.toString(); //="pp"String column02 = PsViewAggregate_.pp.get(PP_.value).toString(); //="pp.value"String column03 = PsViewAggregate_.pp.get(PP_.name).toString(); //="pp.name"String columns = column01 + ", " + column02 + ", " + column03; //="pp, pp.value, pp.name"...Query<PsViewAggregate> query = Ebean.find(PsViewAggregate.class);...query.select(columns);......String orderByStatement = PsViewAggregate_.get(PP_.value).toString(); //="pp_table.value"...OrderBy<PsViewAggregate> orderby = new OrderBy<>(orderByStatement);...query.setOrderBy(orderBy);...Also you should not initialize wwList, let Ebean initialize it and you'll get a BeanList that will be aware of adds and removes.
Thank You for the quick answer Daryl.
Here is the PP entity with the missed out fields:@Entity@Table(name = "pp_table")public class PP {...@Id@Column(name = "id")private UUID id;@Basic(optional = false)@Column(name = "name", length = 100, nullable = true)private String name;@Basic(optional = false)@Column(name = "value", length = 100, nullable = false)private String value;@JoinTable(name = "pp_table_to_ww_table",joinColumns = {@JoinColumn(name = "pp_id", referencedColumnName = "id")},inverseJoinColumns = {@JoinColumn(name = "ww_id", referencedColumnName = "id")})@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)private List<WW> wwList = new ArrayList<>();...//Getters + Setters//}
Ok, so did you try
OrderBy<PsViewAggregate> orderby = new OrderBy<>("pp.value")?
--
---
You received this message because you are subscribed to the Google Groups "Ebean ORM" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ebean+un...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
@Entity@Table(name = "ps_view")public class PsViewAggregate {
@OneToOne @JoinColumn(name = "id", referencedColumnName = "id") private PP pp;
@Basic(optional = false) @Column(name = "amount") private Integer amount; ... //Getters + Setters//}
@Entity@Table(name = "ww")public class WW {
@Id @Column(name = "id") private UUID id;
@Basic(optional = false) @Column(name = "name", unique = true) private String name; ... //Getters + Setters//}
@Entity@Table(name = "pp")public class PP {
@Id @Column(name = "id") private UUID id;
@Basic(optional = false) @Column(name = "name", length = 100, nullable = true) private String name;
@Column(name = "points_01") private Integer points01;
@Column(name = "points_02") private Integer points02;
@Basic(optional = false) @Column(name = "value", length = 100, nullable = false) private String value;
@JoinTable(name = "pp_to_ww", joinColumns = {@JoinColumn(name = "pp_id", referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name = "ww_id", referencedColumnName = "id")}) @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) private List<WW> wwList; ... //Getters + Setters//}CREATE VIEW ps_view ASSELECT p.id AS id, (p.points_01 + p.points_02) AS amount, FROM pp p GROUP BY p.value;PP pp = ...;WW ww = ...; Expr.raw("1 = 1"), Expr.eq("pp.wwList", ww));...OrderBy<PsViewAggregate> orderBy = new OrderBy<>("pp.value");...Query<PsViewAggregate> query = Ebean.find(PsViewAggregate.class);query.select(columns);query.where(where);query.setOrderBy(orderBy);Expression where = Expr.and( Expr.raw("1 = 1"),--
--