Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 同时访问数据库_Java_Database_Google App Engine_Simultaneous - Fatal编程技术网

Java 同时访问数据库

Java 同时访问数据库,java,database,google-app-engine,simultaneous,Java,Database,Google App Engine,Simultaneous,我正在用Google app Engine和Java中的JDO为移动应用程序开发服务器端,同时访问数据库时遇到一些问题 我正在做的应用程序是聊天,当两个人同时访问数据库时,其中一条消息丢失。我认为这是因为两次访问中的一次是在另一次访问之前完成的,而另一次访问是在它保存到数据库之前完成的,这就是为什么其中一条消息丢失的原因 你知道解决这个问题的办法吗?类似于获取对数据库中相同注册表的访问权,并将它们放入队列或堆栈中以供最近访问 提前谢谢 这是我的密码: Conversation.java: 保存消

我正在用Google app Engine和Java中的JDO为移动应用程序开发服务器端,同时访问数据库时遇到一些问题

我正在做的应用程序是聊天,当两个人同时访问数据库时,其中一条消息丢失。我认为这是因为两次访问中的一次是在另一次访问之前完成的,而另一次访问是在它保存到数据库之前完成的,这就是为什么其中一条消息丢失的原因

你知道解决这个问题的办法吗?类似于获取对数据库中相同注册表的访问权,并将它们放入队列或堆栈中以供最近访问

提前谢谢

这是我的密码:

Conversation.java:

保存消息:


您需要向我们展示一些代码来演示您遇到的问题。我们无法在不先查看的情况下诊断您的问题。哦,对不起,我不知道您需要它们,因为它非常简单。就在那里。
import java.util.LinkedList;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

@PersistenceCapable(identityType = IdentityType.APPLICATION)  
public class Conversation 
{
    @PrimaryKey  
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)  
    private Long id;

    @Persistent
    private Long idUser;

    @Persistent(mappedBy = "conversation")
    private LinkedList<Message> messages;

    public Conversation(Long idUser) 
    {
        this.idUser = idUser;

        messages = new LinkedList<Message>();       
    }

    public Long getId() {
        return id;
    }

    public Long getIdUser() {
        return idUser;
    }

    public LinkedList<Message> getMessages() {
        return messages;
    }
}
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import com.google.appengine.api.datastore.Key;

@PersistenceCapable(identityType = IdentityType.APPLICATION)  
public class Message 
{
    @PrimaryKey  
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)  
    private Key id;

    @Persistent
    private Conversation conversation;

    @Persistent
    private String text;

    @Persistent
    private String hour;

    public Message(String text, String hour)
    {
        this.text = text;
        this.hour = hour;
    }

    public String getText() 
    {
        return text;
    }

    public String getHour() 
    {
        return hour;
    }

    public Key getId() 
    {
        return id;
    }

    public Conversation getConversation() {
        return conversation;
    }
}
final PersistenceManager persistenceManager = PMF.get().getPersistenceManager();      

String strQuery = "select from " + Conversation.class.getName() + " where id == " + id;
persistenceManager.getFetchPlan().setGroup(FetchGroup.ALL);
final Query query = persistenceManager.newQuery(strQuery);

try 
{
    List<Conversation> conversations = (List<Conversation>) query.execute;

    Conversation detached = null;
    detached = persistenceManager.detachCopy(conversations.get(0));

    detached.getMessages().add(message);
    persistenceManager.makePersistent(detached);
} finally {
    persistenceManager.close();
}