插入长文本时,Hibernate不会持久

时间:2018-10-12 10:27:12

标签: java mysql spring postgresql hibernate

我使用的是Postgresql 9.6,在使用mySQL之前,两个数据库都出现了相同的问题。 Hibernate 4和Hibernate 5也存在相同的问题。

当我试图持久保存一个带有长字符串的对象时,它永远不会结束session.persist(object)方法。另一方面,当字符串ismySQL和两个数据库遇到相同的问题时,它可以完美地工作。  像这段话没那么长。

VehicleDAO.java中的

addVehicle方法

public Vehicle addVehicle(Vehicle vehicle) {
    Session session = 
    this.sessionFactory.getCurrentSession();
    session.persist(vehicle);
    return vehicle;
}

车辆属性:

public class Vehicle {

    @Id
    @Column(name = "idvehicle")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    int idVehicle;

    @Column(name = "name")
    String name;

    @Column(name = "description")
    String description;

    @Column(name = "photob64")
    String photoB64;

Eclipse控制台日志:

Hibernate: insert into vehicle (description, name, photob64, idvehicletype) values (?, ?, ?, ?)

3 个答案:

答案 0 :(得分:0)

插入长文本时休眠不会持久

根据您的问题,插入长文本时它不会持续存在。这是因为默认情况下,字符串长度为255。您可以在数据库中看到。 VARCHAR(255)长度为255。 您可以使用以下方法提及长度:

@Column(name=" description", length = 300)
private String description;

如果您不确定长度,则最好根据需要使用lob,blob或clob。您可以阅读lob,blob和clob的详细信息,然后选择其中之一。对于文本lob或clob来说,它很适合您。

答案 1 :(得分:0)

有两种方法,

  1. 您可以将columnDefinition设置为

    @Column(name = "notes", columnDefinition = "varchar(300)")
    private String notes;
    
  2. 如果您不知道字符串的最大长度,可以将columnDefinition设置为类似文本的

    @Column(name = "notes", columnDefinition = "text")
    private String notes;
    

答案 2 :(得分:0)

我知道发生了什么事。该方法之所以永无止境,是因为信息无法完全传输到另一台设备Raspberry Pi中的数据库。

我使用以下命令将PC和Raspberry Pi的网络适配器的MTU更改为1492:

sudo ifconfig eth0 mtu 1492

更多信息:http://www.ubuntugeek.com/how-to-change-mtu-maximum-transmission-unit-of-network-interface-in-ubuntu-linux.html