实体表未使用JPA 2.1创建 [英] Entity Table is not creating using JPA 2.1
问题描述
我正在Netbeans中使用JPA 2.1来创建我的实体.如果我的数据库没有表,那么它应该根据实体创建表.
I am using JPA 2.1 in Netbeans to create my entity. If my database has no table then it should create table from entities.
当我部署并运行企业应用程序时,userEntity表未出现在mySQL数据库中.
When I deploy and run my enterprise application, the userEntity table does not appear in my mySQL database.
这里有帮助吗? :)
下面是我的代码.
persistence.xml
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="CommonInfrastructure-ejbPU" transaction-type="JTA">
<jta-data-source>jdbc/commonInfraDatasource</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
userEntity.java
userEntity.java
package entity;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class userEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long systemUserId;
private String userName;
private String password;
private String email;
private int activateStatus;
private String accessGroup;
private int lockOutStatus;
@Override
public int hashCode() {
int hash = 0;
hash += (getSystemUserId() != null ? getSystemUserId().hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the systemUserId fields are not set
if (!(object instanceof userEntity)) {
return false;
}
userEntity other = (userEntity) object;
if ((this.getSystemUserId() == null && other.getSystemUserId() != null) || (this.getSystemUserId() != null && !this.systemUserId.equals(other.systemUserId))) {
return false;
}
return true;
}
@Override
public String toString() {
return "entity.userEntity[id=" + getSystemUserId() + "]";
}
/**
* @return the systemUserId
*/
public Long getSystemUserId() {
return systemUserId;
}
/**
* @param systemUserId the systemUserId to set
*/
public void setSystemUserId(Long systemUserId) {
this.systemUserId = systemUserId;
}
/**
* @return the userName
*/
public String getUserName() {
return userName;
}
/**
* @param userName the userName to set
*/
public void setUserName(String userName) {
this.userName = userName;
}
/**
* @return the password
*/
public String getPassword() {
return password;
}
/**
* @param password the password to set
*/
public void setPassword(String password) {
this.password = password;
}
/**
* @return the email
*/
public String getEmail() {
return email;
}
/**
* @param email the email to set
*/
public void setEmail(String email) {
this.email = email;
}
/**
* @return the activateStatus
*/
public int getActivateStatus() {
return activateStatus;
}
/**
* @param activateStatus the activateStatus to set
*/
public void setActivateStatus(int activateStatus) {
this.activateStatus = activateStatus;
}
/**
* @return the accessGroup
*/
public String getAccessGroup() {
return accessGroup;
}
/**
* @param accessGroup the accessGroup to set
*/
public void setAccessGroup(String accessGroup) {
this.accessGroup = accessGroup;
}
/**
* @return the lockOutStatus
*/
public int getLockOutStatus() {
return lockOutStatus;
}
/**
* @param lockOutStatus the lockOutStatus to set
*/
public void setLockOutStatus(int lockOutStatus) {
this.lockOutStatus = lockOutStatus;
}
}
sun-resources.xml
sun-resources.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 9.0 Resource Definitions //EN" "http://www.sun.com/software/appserver/dtds/sun-resources_1_3.dtd">
<resources>
<jdbc-resource enabled="true" jndi-name="jdbc/commonInfraDatasource" object-type="user" pool-name="CommonInfraConnectionPool">
<description/>
</jdbc-resource>
<jdbc-connection-pool allow-non-component-callers="false" associate-with-thread="false" connection-creation-retry-attempts="0" connection-creation-retry-interval-in-seconds="10" connection-leak-reclaim="false" connection-leak-timeout-in-seconds="0" connection-validation-method="auto-commit" datasource-classname="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" fail-all-connections="false" idle-timeout-in-seconds="300" is-connection-validation-required="false" is-isolation-level-guaranteed="true" lazy-connection-association="false" lazy-connection-enlistment="false" match-connections="false" max-connection-usage-count="0" max-pool-size="32" max-wait-time-in-millis="60000" name="CommonInfraConnectionPool" non-transactional-connections="false" pool-resize-quantity="2" res-type="javax.sql.DataSource" statement-timeout-in-seconds="-1" steady-pool-size="8" validate-atmost-once-period-in-seconds="0" wrap-jdbc-objects="false">
<property name="URL" value="jdbc:XXXXXXXXXX"/>
<property name="User" value="XXXXXXXXX"/>
<property name="Password" value="XXXXXXXXX"/>
</jdbc-connection-pool>
</resources>
其他信息 我启动我的Glassfish服务器,然后右键单击并部署我的企业应用程序. 这应该在我的数据库中创建userEntity表,对吗? 但是,它没有.
Additional Information I start up my Glassfish Server and right click and deploy my enterprise application. This should create the userEntity table in my database right? However,it did not.
推荐答案
无论如何,我设法解决了这个问题.
Anyway, I managed to resolve this problem.
在创建表之前,您需要使用JPA进行操作.
You need to do something using JPA before the table can be created.
例如...
package sessionBean;
import javax.ejb.Stateless;
import entity.userEntity;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
@Stateless
public class userSessionBean implements userSessionBeanLocal {
@PersistenceContext
private EntityManager entityManager;
@Override
public userEntity getUser(String userName) {
Query query = entityManager.createQuery("SELECT u FROM userEntity u WHERE u.userName = :inUserName");
query.setParameter("inUserName", userName);
userEntity systemUser = null;
try {
systemUser = (userEntity) query.getSingleResult();
} catch (NoResultException ex) {
ex.printStackTrace();
}
return systemUser;
}
}
这篇关于实体表未使用JPA 2.1创建的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!