Java 将字符串传递到字符串中<;表达式>;对于CriteriaBuilder.equal方法,使用Hibernate

Java 将字符串传递到字符串中<;表达式>;对于CriteriaBuilder.equal方法,使用Hibernate,java,hibernate,Java,Hibernate,我有一个字符串:tmNumber,我需要将tmNumber传递到以下方法: CriteriaBuilder.equal(Expression<String>.Expression<String>) CriteriaBuilder.equal(Expression.Expression) 但我不知道如何将tmNumber字符串解析为表达式 为了简单起见,我删除了许多与问题无关的代码。假设这是在一个方法中,该方法被传递了一个名为tmNumber的字符串 Expressi

我有一个字符串:tmNumber,我需要将tmNumber传递到以下方法:

CriteriaBuilder.equal(Expression<String>.Expression<String>) 
CriteriaBuilder.equal(Expression.Expression)
但我不知道如何将tmNumber字符串解析为表达式

为了简单起见,我删除了许多与问题无关的代码。假设这是在一个方法中,该方法被传递了一个名为tmNumber的字符串

Expression<String> currentTm = trainingEntryRoot.get("tmnumber");
Expression<String> passedTmNumber = tmNumber; //tmNumber is a string I need to parse to Expression<String>, but how?
Predicate tmNumberPred = builder.equal(passedTmNumber, currentTm);
表达式currentTm=trainingEntryRoot.get(“tmnumber”);
表达式passedTmNumber=tmNumber//tmNumber是我需要解析为表达式的字符串,但如何解析呢?
谓词tmNumberPred=builder.equal(passedTmNumber,currentTm);

CriteriaBuilder还提供了
CriteriaBuilder#equal(Expression,java.lang.Object)
(),它可以将
表达式作为第一个参数,然后将字符串
tmNumber
作为第二个参数

这意味着您所拥有的几乎可以使用,只需稍加修改:

Expression<String> currentTm = trainingEntryRoot.get("tmnumber");
Predicate tmNumberPred = builder.equal(currentTm, tmNumber);
表达式currentTm=trainingEntryRoot.get(“tmnumber”);
谓词tmNumberPred=builder.equal(currentTm,tmNumber);

谢谢您的回复。我知道equal方法的另一个版本。但是:表达式currentTm=trainingEntryRoot.get(“tmnumber”);已经按原样工作了。这部分是:表达式passedTmNumber=tmNumber;这是行不通的。tmNumber是一个字符串。但你是说如果我把tmNumber变成一个对象,它会工作吗?它如何知道要与新对象的哪个属性进行比较?@user2725919我同意currentTm工作正常。我想说的是,您不需要将tmNumber解析为表达式,CriteriaBuilder可以作为对象/字符串来完成。我的示例代码刚刚更改了顺序,以满足方法契约。工作起来非常有魅力!我怀疑字符串是否可以与使用equal方法的对象版本的字符串表达式进行比较。但确实如此。非常感谢。