我想创建一个325列的表:
CREATE TABLE NAMESCHEMA.NAMETABLE
(
ROW_ID TEXT NOT NULL , //this is the primary key
324 column of these types:
CHAR(1),
DATE,
DECIMAL(10,0),
DECIMAL(10,7),
TEXT,
LONG,
) ROW_FORMAT=COMPRESSED;
Run Code Online (Sandbox Code Playgroud)
我用TEXT替换了所有VARCHAR,我在MySQL的my.ini文件中添加了Barracuda,这是添加的属性:
innodb_file_per_table=1
innodb_file_format=Barracuda
innodb_file_format_check = ON
Run Code Online (Sandbox Code Playgroud)
但我仍然有这个错误:
Error Code: 1118
Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
Run Code Online (Sandbox Code Playgroud)
编辑:我无法更改数据库的结构,因为它是遗留的应用程序/系统/数据库.创建一个新表,它是遗留数据库的导出.
编辑2:我写的这个问题与其他人类似,但内部有一些我在互联网上找到的解决方案,如VARCHAR和Barracuda,但我仍然有这个问题所以我决定打开一个新的问题已经内部的经典答案,看看是否有人有其他答案
我需要使用 spring 数据 jpa 在 postgres 中将实体类的两列映射为 json。在阅读了多个 stackoverflow 帖子和 baeldung 帖子后,
如何使用 JPA 将映射 JSON 列映射到 Java 对象
https://www.baeldung.com/hibernate-persist-json-object
我做了如下配置。但是,我面临错误“错误:列“标题”的类型为 json,但表达式的类型为不同的字符“
请提供一些解决此问题的指针。
我有一个实体类如下
@Entity
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class Task {
@Id
@GeneratedValue(strategy = IDENTITY)
private Integer id;
private String url;
private String httpMethod;
@Convert(converter = HashMapConverter.class)
@Column(columnDefinition = "json")
private Map<String, String> headers;
@Convert(converter = HashMapConverter.class)
@Column(columnDefinition = "json")
private Map<String, String> urlVariables;
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个测试类来测试实体是否持久化。在运行这个 junit 时,下面的测试用例失败,错误如下
@SpringBootTest
class TaskRepositoryTest {
private static Task randomTask …Run Code Online (Sandbox Code Playgroud) 我想将 MySQL JSON 列映射到 JPA。我做了一些研究并使用了
@Type( type = "json" )
@Column( columnDefinition = "json" )
Run Code Online (Sandbox Code Playgroud)
但这会引发异常
Exception in thread "main" org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [json]
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:348)
at org.hibernate.boot.internal.ClassLoaderAccessImpl.classForName(ClassLoaderAccessImpl.java:62)
at org.hibernate.cfg.annotations.SimpleValueBinder.fillSimpleValue(SimpleValueBinder.java:538)
at org.hibernate.cfg.SetSimpleValueTypeSecondPass.doSecondPass(SetSimpleValueTypeSecondPass.java:25)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1621)
at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1579)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:858)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:885)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at com.savemonk.ce.utility.hibernateAndJPA.JPAUtility.getEntityManagerFactory(JPAUtility.java:12)
at com.savemonk.ce.v2.pricegraph.manager.AddNewPriceTrackRecord.addNewPriceTrackRecordTest(AddNewPriceTrackRecord.java:29)
at com.savemonk.ce.v2.pricegraph.manager.AddNewPriceTrackRecord.main(AddNewPriceTrackRecord.java:23)
Caused by: java.lang.ClassNotFoundException: Could not load requested class : json
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl$AggregatedClassLoader.findClass(ClassLoaderServiceImpl.java:336)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:345)
... …Run Code Online (Sandbox Code Playgroud) 我尝试了多种将 json 文件存储在数据库中的方法,但最终为每个条目创建了不同的列。
我想将它存储为单个列中的“json”类型。是否可以?
我的json文件。
用户.json
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
"street": "Kulas Light",
"suite": "Apt. 556",
"city": "Gwenborough",
"zipcode": "92998-3874",
"geo": {
"lat": "-37.3159",
"lng": "81.1496"
}
},
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
},
...
]
Run Code Online (Sandbox Code Playgroud)
这是一个 spring-boot 应用程序,我有相关的控制器和服务。
在我的域包中。(地址和公司是可嵌入的类)
用户.java
[
{
"id": 1,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
"address": {
"street": "Kulas Light",
"suite": …Run Code Online (Sandbox Code Playgroud) json ×3
mysql ×3
hibernate ×2
java ×2
spring-boot ×2
create-table ×1
jpa ×1
liquibase ×1
postgresql ×1
sql ×1