小编use*_*058的帖子

使用@EmbeddedId进行映射时出现Eclipse错误

我有一个具有复合键的实体,所以我使用@Embeddable和@EmbeddedId注释.Embeddable类看起来像这样:

@Embeddable
public class DitaAdminAccountSkillPK implements Serializable {

  @ManyToOne
  @JoinColumn(name = "admin_id")
  private DitaAdmin admin;

  @ManyToOne
  @JoinColumn(name = "account_id")
  private DitaAccount account;

  //constructor, getters, setters...
}
Run Code Online (Sandbox Code Playgroud)

以及使用它的实体:

@Entity
public class DitaAdminAccountSkill {

  @EmbeddedId
  private DitaAdminAccountSkillPK id;

  //constructor, getters, setters...
}
Run Code Online (Sandbox Code Playgroud)

现在我想在另一个实体中映射实体,如下所示:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "id.admin")
private List<DitaAdminAccountSkill> accountSkills;
Run Code Online (Sandbox Code Playgroud)

注意mappedBy ="id.admin",它使用DitaAdminAccountSkillid字段引用DitaAdminAccountSkillPK中的admin字段.

这编译并运行得很好.但是,在eclipse中显示的错误显示: 在属性'accountSkills'中,"映射的"值'id.admin'无法解析为目标实体上的属性.

请注意,这是一个JPA问题,这意味着JPA方面正在抱怨.现在,我知道我可以使用@IdClass,但我只是想知道为什么它认为它是一个错误.或者我可能做了一些非常错误的事情?

java eclipse hibernate jpa composite-key

13
推荐指数
3
解决办法
4万
查看次数

Spring Data + QueryDSL空谓词+谓词链接

让我直截了当.我在一个项目中使用Spring Data JPA和QueryDSL,我自己也无法弄清楚这一点.

我在静态方法中有QueryDSL谓词可以接受参数,如果参数不正确,它应该返回"空谓词":

public static BooleanExpression byWhateverId(Long whateverId) {
  if(whateverId == null) return [insert magic here];
  // if parameter is OK return usual predicate
  return QClass.property.whateverId.eq(whateverId);
}
Run Code Online (Sandbox Code Playgroud)

现在我希望能够使用AND/OR操作符链接这些谓词:

someRepository.findAll(byWhateverId(someParam).and(bySomethingElseId(1));
Run Code Online (Sandbox Code Playgroud)

这里的问题是,此时我不知道'someParam'是否为空(当然我可以查看,但那是很多IF).我也知道我可以使用BooleanBuilder类,但这看起来也像很多不需要的代码.

有谁知道可以插入什么而不是"[在这里插入魔法]"??? 或者也许我在某处丢失某些东西......

谢谢!

spring predicate querydsl

6
推荐指数
3
解决办法
7883
查看次数

QueryDSL + PathBuilder +强制转换为字符串

我正在使用动态过滤器过滤PrimeFaces DataTables org.springframework.data.jpa.domain.Specification.我使用Spring工作.现在我想知道如何使用QueryDSL做同样的事情.

使用规范我可以javax.persistence.criteria.Root用来获取javax.persistence.criteria.Join,用于javax.persistence.criteria.Expression.as(Class<String> type)将它转换为String并最终使用javax.persistence.criteria.CriteriaBuilder.like(Expression<String> x, String pattern, char escapeChar).

我如何在QueryDSL中做同样的事情?我可以使用PathBuilder new PathBuilder<T>(clazz, "entity")(你真的必须在这里使用变量吗?我希望我的类是通用的......)然后com.mysema.query.types.path.PathBuilder.get(String property)返回新的PathBuilder而不是Expression.

如果我尝试使用com.mysema.query.types.path.PathBuilder.getString(String property)我得到java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [java.lang.Integer].

似乎我失踪的那部分是演员.我很确定有人正在处理同样的事情.

谢谢.

编辑:IllegalArgumentException的堆栈跟踪

尝试在整数列中搜索文本"1" com.mysema.query.types.path.PathBuilder.getString(String property)- 这就是我需要进行强制转换的地方:

Caused by: java.lang.IllegalArgumentException: Parameter value [1] did not match expected type [java.lang.Integer] at org.hibernate.ejb.AbstractQueryImpl.validateParameterBinding(AbstractQueryImpl.java:375) at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:348) at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:375) at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:442) at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:72) at com.mysema.query.jpa.impl.JPAUtil.setConstants(JPAUtil.java:44) at com.mysema.query.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:130) at com.mysema.query.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:97) at com.mysema.query.jpa.impl.AbstractJPAQuery.list(AbstractJPAQuery.java:240) …

casting path dynamic querydsl

6
推荐指数
1
解决办法
5534
查看次数

标签 统计

querydsl ×2

casting ×1

composite-key ×1

dynamic ×1

eclipse ×1

hibernate ×1

java ×1

jpa ×1

path ×1

predicate ×1

spring ×1