現在使用中:
- 休止状態 4.0.1.Final
- 春のデータjpa: 1.0.3.RELEASE
- QueryDSL: 2.3.0
- MySQL 5.x
答えや手がかりがまだ見つからない興味深い問題があります。外部キーまたはその他の関係を持たない 2 つのテーブルがあります。しかし、この問題を解決するために、1 つ追加しました。User エンティティに UserRole を保持させたい。このパターンはデータベース全体で繰り返されますが、これが最も簡単に説明できます。
ここに私のテーブルがあります:
ユーザー
userId bigint(20) PK
password varchar(255)
status int(11)
userName varchar(255)
userRoleId long
CONSTRAINT `FK_USERROLE` FOREIGN KEY (`userRoleId`) REFERENCES `UserRole` (`userRoleId`)
ユーザーロール
userRoleId bigint(20) PK
userRoleDescription varchar(255)
userRoleDescriptionShort varchar(255)
ここに私のクラスがあります: User.java
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Transient;
import javax.xml.bind.annotation.XmlRootElement;
@Entity
@XmlRootElement(name = "User")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long userId;
private String password;
private int status;
private String userName;
@ManyToOne
@JoinColumn(name = "userRoleId")
private UserRole userRole;
public UserRole getUserRole() {
return userRole;
}
public void setUserRole(UserRole userRole) {
this.userRole = userRole;
}
UserRole.java
@Entity
@XmlRootElement(name = "userRole")
public class UserRole {
private Long userRoleId;
private String userRoleDescription;
private String userRoleDescriptionShort;
@ElementCollection
@OneToMany(mappedBy = "userRole")
private List<User> users;
public UserRole() {...}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getUserRoleId() {... }
@OneToMany(mappedBy = "userRole")
public List<User> getUsers() {...}
したがって、UserRole.userRoleId をユーザーに関連付けようとしている場所がわかります。ユーザーが更新されるたびに、おそらくHibernateがマッピングを構築し、UserRoleを取得/関連付けると思いました。
テーブル間で外部キーを使用するようにこの投稿に戻って編集しましたが、アプリサーバーの起動時に次のようになります。
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.List, at table: UserRole, for columns: [org.hibernate.mapping.Column(users)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:304)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:288)
at org.hibernate.mapping.Property.isValid(Property.java:216)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:467)
at org.hibernate.mapping.RootClass.validate(RootClass.java:268)
at org.hibernate.cfg.Configuration.validate(Configuration.java:1287)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1729)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904)
JPA と一時変数に関連して表示されるそのエラーを探しましたが、ここではそうではありません。