我有一个由GlassFish提供的本地服务器,我有2个客户端:一个是由服务器生成的:JSF;而另一个不在服务器上:用Java编写的终端客户端。
到目前为止,一切都很好。每当我在表中添加一个新行时,我的自动递增主键(数字ID)被精确地提高1并且添加了一行。 现在,每次当我刚刚启动客户端并通过客户端将数据行添加到表中时(无论哪一个都做同样的混乱),id被提升到最接近的51(即最后一个id是303,所以添加后,表中新行的id为351)。如果我的客户端自上次添加后仍在运行,并且我添加了下一行,则可以正常工作:下一个id为352.在我重新启动客户端之前,它会继续没有问题。当我在重新启动客户端后添加一个新行时,它会再次执行相同的操作:将id提升到最接近的51然后再提高1。
由于Java和MySQL的关系,这是一种错误吗?这在我使用PHP之前从未发生过。
编辑:对于使用数据库进行操作,我通过EclipseLink(QuestionDAO.java
)使用ORM技术:
这是我在添加问题时在数据层中所做的事情:
public void add( Question q )
{
em . persist(q);
}
当我从数据层(Facade.java
)调用方法时,这就是我在业务层中所做的事情:
public String addQuestion( String text, String subject )
{
Subject s = subjectDAO.find( subject );
if( s != null )
{
Question q = new Question( text, s );
questionDAO . add(q);
return "Question successfully added";
}
else
return "Subject does not exist";
}
此处还有REST方法:
@POST
@Path("add")
public String add( @FormParam("text") String text, @FormParam("subject") String subject )
{
String s = facade.addQuestion(text, subject);
return s;
}
我的实体类中的注释:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Basic(optional = false)
@Column(name = "question_number")
private Integer questionNumber;
我不相信我的代码中存在错误。