我昨天刚开始使用 Neo4j 学习 GraphDB,现在,我想执行如下所示的 UPSERT 操作;
match (circle:Circle {id:3, cycleId:5})
merge (member1:Member {id:1}) -[invited:INVITED_TO_JOIN {c:circle, time:timestamp()}]-> (member2:Member {id:2})
return member1, member2, invited, circle
Run Code Online (Sandbox Code Playgroud)
根据此处的文档http://neo4j.com/docs/stable/query-merge.html,如果具有指定属性的节点圈不存在,则应创建节点和指定的关系,否则应进行更新对节点和关系执行。然而这并没有发生。我只收到这样的回复(no rows):见下文;
有人可以指出我可能做得不正确吗?
编辑: 但我想动态
创建circle,member1和它们的关系member2,而不用担心节点以前是否存在,但如果它们已经存在,只需相应地更新它们
(主要目标:)建立一种暗示member1邀请member2加入的关系circle3
在所有情况下,任何节点或关系都不应该重复
这应该不会像现在这样困难。我真的开始认为文档未能正确传达某些内容?
另请参阅此处:http ://neo4j.com/docs/stable/query-create-unique.html
让我困惑的是,为什么在/查询返回行之前必须有一个精确的节点匹配?这不会违背查询本身的目的吗?...尤其是在创建方面?match...mergematch...create unique
我什至创建了一个节点,如下所示
create (member:Member) return member
Run Code Online (Sandbox Code Playgroud)
然后尝试以下查询 - …
我有以下构建新JobDetail实例的方法;
private JobDetail getJob(JobID jobID) throws SchedulerException {
Class<? extends Job> jobClass = jobID.getJobClass();
if(jobClass != null){
return JobBuilder
.newJob(jobClass)
.withIdentity(jobID.jobName(), jobID.jobGroup())
.requestRecovery(true)
.build();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
注意:JobID这只是我的帮助程序类,它提供了构建数据库所需的所有必要原始数据JobDetail
然后是另一种进行实际调度的方法;
doSchedule(Scheduler scheduler, JobDetail job, String triggerName){
Trigger trigger = buildSomeTrigger(triggerName);
//check whether job exists in scheduler instance
if(scheduler.checkExists(job.getKey())){
//If trigger also exists, then it probably holds new info
//So, reschedule the existing job with the trigger
if(scheduler.checkExists(trigger.getKey())){
System.out.println("update job with Trigger");
job = job.getJobBuilder().storeDurably(true).build();
scheduler.addJob(job, …Run Code Online (Sandbox Code Playgroud) 这是一个从我这里的另一个问题衍生出来的问题。我认为最好在有人(@Franck)指出这个链接和这个链接之后提出一个不同的问题。
我对如何使用 JPA Criteria API 在数据库日期列(在我的例子中是 MySQL DATETIME)中搜索字符串感到困惑。
这是我所做的;
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Client> cq = cb.createQuery(Client.class);
Root<Client> entity = cq.from(Client.class);
cq.select(entity);
List<Predicate> predicates = new ArrayList<Predicate>();
predicates.add(cb.like(cb.lower(entity.get("dateJoined").as(String.class)), "%"+search.toLowerCase()+"%"));
cq.where(predicates.toArray(new Predicate[]{}));
TypedQuery<Client> query = em.createQuery(cq); //<--- Error gets thrown here
return query.getResultList();
Run Code Online (Sandbox Code Playgroud)
但它失败了,但有以下例外;
Run Code Online (Sandbox Code Playgroud)java.lang.IllegalArgumentException: Parameter value [%10-2015%] did not match expected type [java.lang.Character]
10-2015正在搜索的字符串在哪里;
我被困在如何实现这一目标上。我需要帮助。
这是我保存记录的查询.
public void saveTotal(JTextField txtGtotal, JTextField txtPTotal) {
try {
ResultSet rs = JDBC.getData("select MAX(or_id) as or_id from `order`");
if (rs.first()) {
if (rs.getInt("or_id") > 0) {
try {
String date1 = new Validation().today();
boolean b1 = JDBC.putData("insert into transaction(tr_date, amount, tr_type) values ('" + date1 + "' , '" + txtGtotal.getText() + "' , 'order')");
if (b1) {
try {
ResultSet rs1 = JDBC.getData("select MAX(tr_id) as tr_id from transaction");
if (rs1.first()) {
try {
boolean b2 = JDBC.putData("insert into …Run Code Online (Sandbox Code Playgroud) 首先,我有一个名为目标的表
+----+-----------+---------------------+---------------------+
| id | member_id | created_at | updated_at |
+----+-----------+---------------------+---------------------+
| 8 | 4 | 2016-08-08 15:36:06 | 2016-08-08 15:36:06 |
| 9 | 4 | 2016-08-08 15:38:37 | 2016-08-08 15:38:37 |
| 10 | 4 | 2016-08-08 15:44:13 | 2016-08-08 15:44:13 |
| 11 | 4 | 2016-08-08 16:45:14 | 2016-08-08 16:45:14 |
| 12 | 4 | 2016-08-08 16:54:10 | 2016-08-08 16:54:10 |
| 13 | 4 | 2016-08-08 17:04:13 | 2016-08-08 17:04:13 | …Run Code Online (Sandbox Code Playgroud)