我在“条件查询”中遇到了严重问题。
我的实体类如下所示:
class X {
...
@Columns(columns = {
@Column(name = "priceCurrency", nullable = false),
@Column(name = "priceAmount", nullable = false)})
@Type(type = "org.jadira.usertype.moneyandcurrency.joda.PersistentBigMoneyAmountAndCurrency")
@Basic(fetch = FetchType.EAGER)
BigMoney price;
...
}
Run Code Online (Sandbox Code Playgroud)
而且我还有另一个班级Y,其中有一个List<X> xs。
我也有一个正常的 JPA查询:
SELECT y
FROM Y y
LEFT JOIN y.xs x
GROUP BY y
ORDER BY SUM(y.price.amount)
Run Code Online (Sandbox Code Playgroud)
现在,我想将其转移到CriteriaQuery。我开始于:
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Y> q = cb.createQuery(Y.class);
Root<Y> root = q.from(Y.class);
ListJoin<Y, X> j = root.join(Y_.xs, JoinType.LEFT);
q.groupBy(root);
Run Code Online (Sandbox Code Playgroud)
我尝试了一些方法,但是都没有用:(这里有一些例子:
Path<BigDecimal> x = j.get("priceAmount");
Run Code Online (Sandbox Code Playgroud)
要么:
Path<BigDecimal> …Run Code Online (Sandbox Code Playgroud) 我有两个实体,A和B.它们之间存在多对多关系,其中A包含一个列表B.如何编写规范来检索A包含B特定名称的所有entites ?例:
@Service
public class YourService {
@Resource
private ARepository repository;
// I know how to do this type of queries with specifications
public List<A> getByB(B b) {
return repository.findAll(Specifications.containsB(b));
}
//Question: how to write Specification for this type of query?
public List<A> getByNameOfB(String name) {
return repository.findAll(Specifications.containsBWithName(name));
}
}
Run Code Online (Sandbox Code Playgroud)
实体:
@Entity
public class B {
@Id
@SequenceGenerator(sequenceName = "B_SEQ", name = "BSeq", allocationSize = 1) …Run Code Online (Sandbox Code Playgroud) 我在控制器的同一个包中有一个 json 文件,我尝试读取该文件并将其转换为 String
new String(Files.readAllBytes(Paths.get("CustomerOrganization.json")));
Run Code Online (Sandbox Code Playgroud)
但我得到了一个错误:
java.nio.file.NoSuchFileException: CustomerOrganization.json
Run Code Online (Sandbox Code Playgroud)
在我们的系统中,我们的数据库如下所示
一个代理商有很多经纪人,一个经纪人有很多用户,一个用户有很多订单.
我正在尝试使用hibernate标准来查找指定经纪商下的所有用户订单.在简单的SQL中,这将非常容易.我可以在条件api中执行此操作吗?我发现在使用点击和过滤器类型时,条件api工作得特别好,因为您可以构建一个非有序的限制列表并将它们添加到条件中.
目前我有这个不起作用
final Session session = (Session) entityManager.getDelegate();
final Brokerage brokerage = userAdmin.loadBrokerage(brokerageId);
@SuppressWarnings({"UnnecessaryLocalVariable", "unchecked"})
final List<UserOrder> userOrders = session
.createCriteria(UserOrder.class)
.add(Restrictions.eq("user.brokerage", brokerage))
.list();
Run Code Online (Sandbox Code Playgroud)
我收到消息"由以下原因引起:org.hibernate.QueryException:无法解析属性:user.brokerage:com.printlogix.rp.server.domain.UserOrder:".
你能将param名称传递给Restrictions.eq,如"object.parentobject.property"吗?
我编写了一个SQL查询,它基本上从许多表中选择,以确定哪些表具有自特定日期以来创建的行.我的SQL看起来像这样:
SELECT widget_type FROM(
SELECT 'A' as widget_type
FROM widget_a
WHERE creation_timestamp > :cutoff
UNION
SELECT 'B' as widget_type
FROM widget_b
WHERE creation_timestamp > :cutoff
) types
GROUP BY widget_type
HAVING count(*)>0
Run Code Online (Sandbox Code Playgroud)
这在SQL中运行良好但我最近发现,虽然JPA可能使用联合执行"每类表"多态查询,但JPQL不支持查询中的联合.所以这让我想知道JPA是否有一个替代方案可以用来完成同样的事情.
实际上,我会查询十几个表,而不仅仅是两个表,所以我想避免单独查询.我还想避免出于可移植性原因而进行本机SQL查询.
在我上面链接的问题中,有人询问映射到widget_a和widget_b的实体是否是同一继承树的一部分.对,他们是.但是,如果我从他们的基类中选择,我不相信我会为不同的子实体指定不同的字符串常量,我会吗?如果我可以选择实体的类名而不是我提供的字符串,那也可能符合我的目的.但我不知道这是否可能.思考?
我正在研究从中间失败的阶段重新启动詹金斯管道的能力(例如)。
我继承了这个 CI 服务器并负责更新它,所以我发现这个功能可以“从阶段重新启动”:https : //jenkins.io/doc/book/pipeline/running-pipelines/#restart-from-a-stage
但是,我没有在 jenkins UI 上看到这个按钮。我猜这是因为我的 jenkins 版本太旧了。
这是我服务器上的一些信息:Jenkins 版本。2.107 插件信息:管道 - 2.5
如果有帮助,我可以分享其他插件信息。
问题:1)我需要做什么才能从舞台功能重新启动?2) 下次我怎样才能知道我需要什么版本才能获得某些新功能(如果这是根本原因)?
我遇到了无法解决的非常烦人的问题,我想我错过了一些非常直接的东西,因为我已经有了 Java 中的工作代码。
基本上我所拥有的是这样的:
class ConfigurationSpecification(
private var list: MutableList<SearchCriteria> = mutableListOf()
) : Specification<Configuration> {
override fun toPredicate(root: Root<Configuration>, query: CriteriaQuery<*>, builder: CriteriaBuilder): Predicate? {
val predicates: MutableList<Predicate> = mutableListOf()
for (criteria in list) {
if (criteria.operation == "EQUALS") {
predicates.add(builder.equal(root.get(criteria.key), criteria.value)) <- NOT WORKING root.get(criteria.key) this is making issue
}
}
return builder.and(predicates[0])
}
}
Run Code Online (Sandbox Code Playgroud)
代码真的很简单,但由于某种原因 Kotlin 抱怨它,我得到的错误是这样的:
错误:(19, 51) Kotlin:类型推断失败:没有足够的信息来推断 fun get(p0: String!): 中的参数 Y:路径!请明确指定。
这是工作的java代码:
predicates.add(builder.equal(root.get(criteria.getKey()), criteria.getValue())); <- working with Java
Run Code Online (Sandbox Code Playgroud)
任何有经验的 Kotlin 人知道这个错误的解决方法吗?我见过其他一些人有类似的问题,但我无法根据我看到的答案解决这个问题。
我正在使用 jhipster 标准和 jpa 规范来实现用于研究的端点。
好吧,它正在工作,但继续向我发送重复项。
有这个模型的prestations
public class Prestation extends AbstractAuditingEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
@NotNull
@Column(name = "jhi_label", nullable = false)
private String label;
@Column(name = "description")
private String description;
@Column(name = "unit")
private String unit;
@NotNull
@Column(name = "activated", nullable = false)
private boolean activated;
@ManyToOne(optional = false)
@NotNull
@JsonIgnoreProperties("prestations")
private SubCategory subCategory;
@OneToMany(mappedBy = "prestation", cascade = …Run Code Online (Sandbox Code Playgroud) 我在我的mysql数据库2表中:
1.teacher(id(pk),name,phone,email)
2.student(id(pk),teacher'sid(FK),name,phone,email)
Run Code Online (Sandbox Code Playgroud)
学生表有一个外键,老师的,对于老师.id.
我想选择他们的id(teachers.id)与(student.teacher'sid)相同的老师,其中student.name ="Steven".
我创建了两个具有与表相同的类名和属性的类,并且我已经配置了映射.
@Entity
class teacher {
@Id
int id;
String name;
String phone;
String email;
}
@Entity
class student {
@Id
int id;
int teachersid;
String name;
String phone;
String email;
}
Run Code Online (Sandbox Code Playgroud)
我可以通过以下方式选择他的名字是"史蒂文"的学生:
Criteria q = session.createCriteria(student.class).add(
Restrictions.eq("name", "stevens"));
Run Code Online (Sandbox Code Playgroud)
如何能够挽回"史蒂文"的老师?就像是
(select * from teacher(where teacher.id = student.teachersid(where student.name="stevens")))
Run Code Online (Sandbox Code Playgroud)
,但使用Hibernate Criteria Api.
提前致谢!
如何从对象下方获取日期
Google\Cloud\Core\Timestamp Object
(
[value:Google\Cloud\Core\Timestamp:private] => DateTimeImmutable Object
(
[date] => 2020-02-11 05:17:40.679449
[timezone_type] => 2
[timezone] => Z
)
[nanoSeconds:Google\Cloud\Core\Timestamp:private] => 679449000
)
Run Code Online (Sandbox Code Playgroud)