我有一个使用hibernate的Spring启动应用程序,因为它是ORM框架。它公开了RESTful API,其中一种方法将新消息插入表中。
我遇到的问题是它执行对Oracle的调用以检索序列号的nextval,然后当它插入它使用该池中的第一个数字时,然后当另一个请求进入时,它接受值下一个nextval而不是使用初始池中的下一个值。所以它应该是100,101,102等...但是它变得像100,200,300(分配大小是100)。
所有bean都是单例,包括持久保存消息的DAO。
@Entity
@Table(name = "MESSAGE")
public class Message implements Serializable {
@Id
@SequenceGenerator(name = "MESSAGEID_GENERATOR", sequenceName = "SEQ_MESSAGE", allocationSize = 100)
@GeneratedValue(generator = "MESSAGEID_GENERATOR", strategy = GenerationType.SEQUENCE)
@Column(name = "MESSAGEID", unique = true, nullable = false, precision = 10)
private Long messageid;
}
道:
@Repository
public class MessageDao {
@PersistenceContext(unitName = "ORM_Model")
private EntityManager entityManager;
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
public EntityManager getEntityManager() {
return entityManager;
}
@Transactional
public long save(Message message) {
entityManager.persist(message);
entityManager.flush();
return message.getMessageid();
}
}
persistance.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="ORM_Model">
<description>The IFIS Database Entity Model</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.package.Message</class>
<properties>
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.transaction.flush_before_completion" value="true" />
<property name="hibernate.id.new_generator_mappings" value="true" />
</properties>
</persistence-unit>
</persistence>
知道这可能是什么问题吗?
问候!
答案 0 :(得分:0)
设置以解决您的问题。