Batch inserting causes " holders of that lock are waiting for ForsetiClient" in a single transaction


I have the following cypher:
batch size is 10k

UNWIND $batch as row 
MATCH (from:Project) 
WHERE = row.from_id 
MATCH (to:Project_Tag) 
WHERE = row.to_id 
MERGE (from)-[r:HAS_TAG]-(to) 
ON MATCH SET =,r.website_page_num = row.website_page_num,r.website_appear_num = row.website_appear_num,r.updated_time = row.updated_time 
ON CREATE SET =,r.website_page_num = row.website_page_num,r.website_appear_num = row.website_appear_num,r.updated_time = row.updated_time,r.desc_page_num = "0",r.desc_appear_num = "0" 

I have already created millions of Project nodes and Project_Tag nodes with indexing all nodes attributes before running the above cypher query. it will somehow cause the followed exception when I run this cypher under Java and in a single transaction:

can't acquire ExclusiveLock{owner=ForsetiClient[0]} on NODE(290), because holders of that lock are waiting for ForsetiClient[1]

I have no idea how this happened. Is it possible that ExclusiveLock problem could be caused in a single transaction? Can anyone help me?