JPA ID GeneratedValue使用Oracle nextValue序列而不是下一个值

时间:2017-02-01 14:27:06

标签: spring oracle hibernate jpa

我有一个使用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>

知道这可能是什么问题吗?

问候!

1 个答案:

答案 0 :(得分:0)

设置以解决您的问题。