社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Sander Verhagen

Sander Verhagen 最近创建的主题
Sander Verhagen 最近回复了

这里有很好的答案。我只是添加我的,因为我遇到了同样的错误,但结果却是一个完全不同的问题。(表面上可能相同,但根本原因不同。)

对我来说,以下字段发生了错误:

@Column(nullable = false, columnDefinition = "VARCHAR(255)")
private URI consulUri;

这最终作为 URI 班级。这不会对单元测试(使用h2)或ci/集成测试(使用 MariaDB4j )在我们的生产中爆炸了。(不过,一旦理解了问题,就很容易在mariadb4j实例中看到错误的值;它只是没有破坏测试。)解决方案是构建一个自定义类型映射器:

package redacted;

import javax.persistence.AttributeConverter;
import java.net.URI;
import java.net.URISyntaxException;

import static java.lang.String.format;

public class UriConverter implements AttributeConverter<URI, String> {
    @Override
    public String convertToDatabaseColumn(URI attribute) {
        return attribute.toString();
    }

    @Override
    public URI convertToEntityAttribute(String field) {
        try {
            return new URI(field);
        }
        catch (URISyntaxException e) {
            throw new RuntimeException(format("could not convert database field to URI: %s", field));
        }
    }
}

使用如下:

@Column(nullable = false, columnDefinition = "VARCHAR(255)")
@Convert(converter = UriConverter.class)
private URI consulUri;

就hibernate而言,它似乎有很多 provided type mappers ,包括 java.net.URL ,但不是为了 java.net.URI (这正是我们需要的)。