這個問題已經被問過很多次,但沒有一個答案似乎幫助我的人,所以我會再試一次詢問,並希望運氣:Hibarnate org.hibernate.MappingException:無法確定類型SimpleStringProperty
我有類分數
@Entity(name="SokoTable")
public class Score implements Serializable{
@Column(name="ID")
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private private SimpleIntegerProperty id;
@Column(name="Username")
private SimpleStringProperty userName;
@Column(name="Level")
private SimpleStringProperty levelName;
@Column(name="Steps")
private SimpleIntegerProperty steps;
@Column(name="Time")
private SimpleIntegerProperty time;
public Score(){
}
public Score(String userName, String levelName, int steps, int time) {
super();
this.userName = new SimpleStringProperty(userName);
this.levelName = new SimpleStringProperty(levelName);
this.steps = new SimpleIntegerProperty(steps);
this.time = new SimpleIntegerProperty(time);
}
public int getId() {
return id.get();
}
public void setId(int id) {
this.id.set(id);
}
public String getUserName() {
return userName.get();
}
public void setUserName(String userName) {
this.userName.set(userName);
}
public String getLevelName() {
return levelName.get();
}
public void setLevelName(String levelName) {
this.levelName.set(levelName);
}
public int getSteps() {
return steps.get();
}
public void setSteps(int steps) {
this.steps.set(steps);
}
public int getTime() {
return time.get();
}
public void setTime(int time) {
this.time.set(time);
}
}
類SokoDBManager將管理數據庫
public class SokoDBManager {
private static SessionFactory factory;
private static SokoDBManager instance=new SokoDBManager() ;
public static SokoDBManager getInstance() {
return instance;
}
private SokoDBManager() {
Configuration configuration = new Configuration();
configuration.configure();
factory = configuration.buildSessionFactory();
}
private static void searchScoresWhoseNameStartsWith(String prefix) {
Session session = factory.openSession();
Query query = session.createQuery("from SokoTable where Username LIKE :prefix");
query.setParameter("prefix", prefix + "%");
List<Score> list = query.list();
for (Score e : list) {
System.out.println(e.getUserName());
}
session.close();
}
public void addScore(Score score){
Session session = null;
Transaction tx = null;
try {
session = factory.openSession();
tx = session.beginTransaction();
session.save(score);
tx.commit();
}
catch (HibernateException ex) {
if (tx != null)
tx.rollback();
System.out.println(ex.getMessage());
}
finally {
if (session != null)
session.close();
}
}
// Method to print all Scores
public static ObservableList<Score> getScoreList(String Levelname) {
Session session = factory.openSession();
ObservableList<Score> list=null;
try {
Query query = session.createQuery("from SokoDB.Score where Level =:Levelname Order by Steps");
query.setParameter("Levelname",Levelname);
list = FXCollections.observableArrayList(query.list());
System.out.println(list.getClass());
for (Score e : list) {
System.out.println(e.getUserName());
}
} catch (HibernateException e) {
e.printStackTrace();
} finally {
session.close();
}
return list;
}
public void close() {
factory.close();
}
}
例如,如果我會嘗試運行這段代碼:
ObservableList<Score> data=SokoDBManager.getScoreList("Level 1");
for(Score e :data)
System.out.println(e.getTime());
我會得到這個錯誤:
Caused by: java.lang.ExceptionInInitializerError
at view.SokobanViewer.openFile(SokobanViewer.java:64)
... 53 more
Caused by: org.hibernate.MappingException: Could not determine type for: javafx.beans.property.SimpleStringProperty, at table: SokoTable, for columns: [org.hibernate.mapping.Column(Level)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:455)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:422)
at org.hibernate.mapping.Property.isValid(Property.java:226)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:597)
at org.hibernate.mapping.RootClass.validate(RootClass.java:265)
at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:329)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:710)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:726)
at SokoDB.SokoDBManager.<init>(SokoDBManager.java:29)
at SokoDB.SokoDBManager.<clinit>(SokoDBManager.java:21)
... 54 more
是它涉及到SimpleStringProperty? 什麼可能是這個錯誤的原因,我該如何解決它? 感謝
可能你需要某種轉換器... – fabian