hibernate在插入长文本时不会持久

6bc51xsx  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(312)

我使用的是postgresql9.6,在使用mysql之前,这两个数据库也有同样的问题。Hibernate4和Hibernate5也有同样的问题。
当我试图持久化一个包含长字符串的对象时,它永远不会结束方法session.persist(object)。另一方面,当字符串为mysql时,它可以很好地工作,因为两个数据库都有同样的问题。没那么长,像这一段。
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 (?, ?, ?, ?)
fjaof16o

fjaof16o1#

当插入长文本时,hibernate不会持久存在
根据你的问题,当插入长文本时,它不会持续存在。这是因为默认的字符串长度是255。您可以在数据库中看到。varchar(255)长度是255。您可以使用以下方法来计算长度:

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

如果您不确定长度,那么最好根据您的需要选择lob、blob或clob。您可以阅读lob、blob和clob的详细信息并选择其中一个。对于文本lob或clob将为您工作。

qlvxas9a

qlvxas9a2#

我知道发生了什么。由于信息无法完全传输到另一个设备(树莓pi)中的db,因此该方法一直没有结束。
我用以下命令将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

s8vozzvw

s8vozzvw3#

有两种方法,
你可以像这样设置列定义

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

如果您不知道字符串的最大长度,可以将columndefinition设置为文本

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

相关问题