为什么生成table_seq虽然我没有指定它

时间:2013-10-15 08:25:44

标签: java openjpa

我正在使用OpenJPA 2.2.2我的persistence.xml如下所示

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="PU" transaction-type="RESOURCE_LOCAL">
    <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>

    <class>package.User</class>

    <properties>
        <property name="openjpa.ConnectionURL" value="jdbc:postgresql://localhost:5432/postgres" />
        <property name="openjpa.ConnectionDriverName" value="org.postgresql.Driver" />
        <property name="openjpa.ConnectionUserName" value="postgres" />
        <property name="openjpa.ConnectionPassword" value="****" />

        <property name="openjpa.DynamicEnhancementAgent" value="true" />
        <property name="openjpa.RuntimeUnenhancedClasses" value="supported" />

        <property name="openjpa.Log" value="SQL=TRACE" />
        <property name="openjpa.ConnectionFactoryProperties" value="PrettyPrint=true, PrettyPrintLineLength=72, PrintParameters=true, MaxActive=10, MaxIdle=5, MinIdle=2, MaxWait=60000" />

        <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema" />
    </properties>
</persistence-unit>

和User.java

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private long id;
    ...

尽管创建了seq_table而没有创建序列(本地的)。如何修复它使用内置序列我正在使用postgreSQL。另外,我不明白为什么每个PK在使用上面时都是前一个PK的+50。

1 个答案:

答案 0 :(得分:1)

  

另外我不明白为什么每个PK在使用上面时都是前一个PK的+50。

每个PK与前一个PK相差的原因很可能是因为你经常这样做?创建新的EntityManagerFactories。每次创建新的EMF时,默认情况下它将返回到序列表以获得新的50个密钥。每次丢弃EMF时,任何未使用的密钥都将被丢弃。