虽然我在stackoverflow上读取了session.get null问题并尝试按照他们的建议进行操作,但我的问题似乎还在继续。
SessionFactory mysessionfactory = new Configuration().configure().buildSessionFactory();
Session mysession = mysessionfactory.openSession();
mysession.beginTransaction();
Myperson person3 = (Myperson) mysession.get(Myperson.class, 3);
System.out.println("there you go : "+person3.getName());
看起来很简单,我只是想从数据库中检索数据。让我告诉你数据库。
如您所见,我想要检索的数据有一个名字!
这就是我得到的,没有! 最后,我运行调试模式的代码,我希望你能理解这个问题,并建议一个解决方案。
我在这里发生冲突,我的数据库显示UserId为3的数据有一个名字,但为什么我不能在输出中看到它?
编辑:这是我要求的hibernate xml文件。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="connection.pool.size">1</property>
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/myhibernatedb
</property>
<property name="hibernate.connection.username">
root
</property>
<property name="hibernate.connection.password">
000003
</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<!-- List of XML mapping files -->
<mapping class="org.emreverim.com.Myperson"/>
<mapping class="org.emreverim.com.Vehicle" />
<mapping class="org.emreverim.com.FourWheeler" />
<mapping class="org.emreverim.com.TwoWheeler" />
</session-factory>
</hibernate-configuration>
编辑2:这是您要求的myperson类。
@Entity
public class Myperson {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int userID;
private String name;
@OneToMany(cascade=CascadeType.PERSIST)
private Collection<Vehicle> vehicle = new ArrayList<Vehicle>();
public Collection<Vehicle> getVehicle() {
return vehicle;
}
public void setVehicle(Collection<Vehicle> vehicle) {
this.vehicle = vehicle;
}
@Lob
private String description;
@Temporal (TemporalType.DATE)
private Date joinedDate;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Date getJoinedDate() {
return joinedDate;
}
public void setJoinedDate(Date joinedDate) {
this.joinedDate = joinedDate;
}
public int getUserID() {
return userID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setUserID(int userID){
this.userID = userID;
}
}
答案 0 :(得分:1)
在您的实体地图中,您忘记将@column属性注释添加到字段中,而@table将其链接到表格。
示例:
@Column(name="description")
private String description;
答案 1 :(得分:1)
我认为这里的问题是因为Hibernate Session.get() method 需要一个Seriliazable id
对象,而在你的情况下没有提供这里mysession.get(Myperson.class, 3)
。
因为这里的给定值3
是原始类型int
,它只包含值而且没有序列化,所以你必须使用 new Integer()方法为了传递Integer
可序列化对象或 new Long()将Long
可序列化对象传递给get()
方法,只需更改:
Myperson person3 = (Myperson) mysession.get(Myperson.class, 3);
要:
Myperson person3 = (Myperson) mysession.get(Myperson.class, new Integer(3));
或者:
Myperson person3 = (Myperson) mysession.get(Myperson.class, new Long(3));
答案 2 :(得分:1)
我们碰巧看到了解决方案,我的数据库已经配置为utf-16,而它应该是utf-8。所以它就像那样简单。感谢你所有的担忧,我为所有的答案付出了沉重的代价。