@transient と transient キーワードの間の議論を読みました: JPA に @Transient アノテーションがあるのはなぜですか?
しかし、@Transient 表記ではなく java キーワードを使用して特定のフィールドを一時的にすると、それらのフィールドはテーブルの作成時にテーブルに作成されません。どうしてこれなの?
ここに私の persistence.xml があります:
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="someDB" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>somewhere.classnameA</class>
<class>somewhere.classnameB</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://localhost:3306/project" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="" />
<!-- EclipseLink should create the database schema automatically -->
<property name="eclipselink.ddl-generation" value="create-or-extend-tables" />
<property name="eclipselink.ddl-generation.output-mode"
value="both" />
</properties>
エンティティの例を次に示します。
import java.sql.Timestamp;
import com.google.gwt.user.client.rpc.IsSerializable;
@Entity
public class Session implements IsSerializable{
@Id
@Basic(optional = false)
@Column(length = 36)
private String sessionID;
@Version
@Basic(optional = false)
transient private Timestamp lastModification;
@Basic(optional = false)
transient private Timestamp expireTime;
@OneToOne(optional = false)
private User user;
protected Session(){
}
// constructor server side
public Session(String sessionID, User user, Timestamp expireTime){
this.sessionID = sessionID;
this.user = user;
this.expireTime = expireTime;
}
public String getSessionID() {
return sessionID;
}
public void setSessionID(String sessionID) {
this.sessionID = sessionID;
}
public Timestamp getLastModification() {
return lastModification;
}
public void setLastModification(Timestamp lastModification) {
this.lastModification = lastModification;
}
public Timestamp getExpireTime() {
return expireTime;
}
public void setExpireTime(Timestamp expireTime) {
this.expireTime = expireTime;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
@Transient
public String toString() {
String userID = (user != null) ? String.valueOf(user.getUserID()) : "?";
return String.format("(%s)%s", userID, sessionID);
}
}
注: 上記のファイルでは、重要でないインポートをいくつか削除しました。生成されたテーブルには、SESSIONID と USER_USERID という 2 つのフィールドしかありません。永続化API 1.0も使用しました