Hibernate:SQL 服务器数据库中的所有表都不是自动创建的
Hibernate : All tables in SQL Server database are not auto-created
从 Microsoft SQL Server 2012 上的数据库中的 Java 创建 tables。创建所有 tables,一个 table 除外。我正在使用 JPA,并且有我的 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="teknikPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/teknikNDataSource</jta-data-source>
<class>com.royken.entities.Bloc</class>
<class>com.royken.entities.Elements</class>
<class>com.royken.entities.Organes</class>
<class>com.royken.entities.SousOrganes</class>
<class>com.royken.entities.Utilisateurs</class>
<class>com.royken.entities.Zone</class>
<class>com.royken.entities.Reponse</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="eclipselink.ddl-generation" value="create-or-extend-tables"/>
<property name="eclipselink.logging.level" value="OFF"/>
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.query-results-cache" value="false"/>
<!-- <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.engine.transaction.jta.platform.internal.SunOneJtaPlatform" />
<property name="hibernate.transaction.factory_class" value="org.hibernate.engine.transaction.internal.jta.JtaTransactionFactory"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.classloading.use_current_tccl_as_parent" value="false"/>-->
<!--<property name="javax.persistence.schema-generation.database.action" value="create"/> -->
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
这就是我定义 类 的方式:
@Entity
@XmlRootElement(name = "elements")
@Table(name = "ELEMENTS")
@XmlAccessorType(XmlAccessType.FIELD)
public class Elements implements Serializable {
private static final long serialVersionUID = 1L;
@OneToMany(mappedBy = "elements")
private List<Reponse> reponses;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Version
@Column(name = "VERSION")
private int version;
@Column(name = "NOM")
private String nom;
@Column(columnDefinition = "tinyint(1) default true", name = "HASBORNS")
private boolean hasBorns;
@Column(columnDefinition = "tinyint(1) default true", name = "CRITERIAALPHA")
private boolean criteriaAlpha;
}
我这样定义了 7 个 table,但是只创建了 6 个 table,没有创建元素 table。当我使用 mysql 数据库更改数据源时(不更改任何部分代码),我所有的 table 都创建良好。
可能是什么问题?
下图显示了 SQL 服务器中的结果,元素 table 不存在。
在你的persistence.xml
中使用:
<property name="eclipselink.deploy-on-startup" value="true" />
在您的代码中,您可以使用:
import javax.ejb.Stateless;
import entity.userEntity;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
寻找 EntityManager
@PersistenceContext
private EntityManager entityManager;
然后像这样使用它:
Query query = entityManager.createQuery("SELECT e FROM Elements e WHERE e.id= :idValue");
query.setParameter("idValue", 1);
Elements elements = null;
try {
elements = (Elements) query.getSingleResult();
} catch (NoResultException ex) {
ex.printStackTrace();
}
您可以参考this
如果这也无济于事,请查看
我找到了解决问题的办法。实体 table 未创建,因为 SQL 服务器不接受 true 作为 hasborns 和 [=18= 的默认值]criteriaalpha。此外,它现在没有分配给 tinyint 类型的大小。所以它在 table 创建期间抛出错误。为了解决这个问题,我更换了:
@Column(columnDefinition = "tinyint(1) default true", name = "HASBORNS")
private boolean hasBorns;
@Column(columnDefinition = "tinyint(1) default true", name = "CRITERIAALPHA")
private boolean criteriaAlpha;
与:
@Column(columnDefinition = "BIT default 1", name = "HASBORNS", length = 1)
private boolean hasBorns ;
@Column(columnDefinition = "BIT default 1", name = "CRITERIAALPHA", length = 1)
private boolean criteriaAlpha ;
成功了
从 Microsoft SQL Server 2012 上的数据库中的 Java 创建 tables。创建所有 tables,一个 table 除外。我正在使用 JPA,并且有我的 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="teknikPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/teknikNDataSource</jta-data-source>
<class>com.royken.entities.Bloc</class>
<class>com.royken.entities.Elements</class>
<class>com.royken.entities.Organes</class>
<class>com.royken.entities.SousOrganes</class>
<class>com.royken.entities.Utilisateurs</class>
<class>com.royken.entities.Zone</class>
<class>com.royken.entities.Reponse</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="eclipselink.ddl-generation" value="create-or-extend-tables"/>
<property name="eclipselink.logging.level" value="OFF"/>
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.query-results-cache" value="false"/>
<!-- <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.engine.transaction.jta.platform.internal.SunOneJtaPlatform" />
<property name="hibernate.transaction.factory_class" value="org.hibernate.engine.transaction.internal.jta.JtaTransactionFactory"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.classloading.use_current_tccl_as_parent" value="false"/>-->
<!--<property name="javax.persistence.schema-generation.database.action" value="create"/> -->
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
这就是我定义 类 的方式:
@Entity
@XmlRootElement(name = "elements")
@Table(name = "ELEMENTS")
@XmlAccessorType(XmlAccessType.FIELD)
public class Elements implements Serializable {
private static final long serialVersionUID = 1L;
@OneToMany(mappedBy = "elements")
private List<Reponse> reponses;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID")
private Long id;
@Version
@Column(name = "VERSION")
private int version;
@Column(name = "NOM")
private String nom;
@Column(columnDefinition = "tinyint(1) default true", name = "HASBORNS")
private boolean hasBorns;
@Column(columnDefinition = "tinyint(1) default true", name = "CRITERIAALPHA")
private boolean criteriaAlpha;
}
我这样定义了 7 个 table,但是只创建了 6 个 table,没有创建元素 table。当我使用 mysql 数据库更改数据源时(不更改任何部分代码),我所有的 table 都创建良好。
可能是什么问题?
下图显示了 SQL 服务器中的结果,元素 table 不存在。
在你的persistence.xml
中使用:
<property name="eclipselink.deploy-on-startup" value="true" />
在您的代码中,您可以使用:
import javax.ejb.Stateless;
import entity.userEntity;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
寻找 EntityManager
@PersistenceContext
private EntityManager entityManager;
然后像这样使用它:
Query query = entityManager.createQuery("SELECT e FROM Elements e WHERE e.id= :idValue");
query.setParameter("idValue", 1);
Elements elements = null;
try {
elements = (Elements) query.getSingleResult();
} catch (NoResultException ex) {
ex.printStackTrace();
}
您可以参考this
如果这也无济于事,请查看
我找到了解决问题的办法。实体 table 未创建,因为 SQL 服务器不接受 true 作为 hasborns 和 [=18= 的默认值]criteriaalpha。此外,它现在没有分配给 tinyint 类型的大小。所以它在 table 创建期间抛出错误。为了解决这个问题,我更换了:
@Column(columnDefinition = "tinyint(1) default true", name = "HASBORNS")
private boolean hasBorns;
@Column(columnDefinition = "tinyint(1) default true", name = "CRITERIAALPHA")
private boolean criteriaAlpha;
与:
@Column(columnDefinition = "BIT default 1", name = "HASBORNS", length = 1)
private boolean hasBorns ;
@Column(columnDefinition = "BIT default 1", name = "CRITERIAALPHA", length = 1)
private boolean criteriaAlpha ;
成功了