加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java – 从数据库中检索的实体与查询中的情况相同

发布时间:2020-12-15 01:34:35 所属栏目:大数据 来源:网络整理
导读:我的数据库包含下表: 表: country { code varchar(255) not null primary key}; 类: @Entitypublic class Country { @Id @Column(name = "code") private String mCode; public String getCode() { return mCode; } public void setCode(String code) { m

我的数据库包含下表:

表:

country {
    code varchar(255) not null
        primary key
};

类:

@Entity
public class Country {
    @Id
    @Column(name = "code")
    private String mCode;

    public String getCode() {
        return mCode;
    }

    public void setCode(String code) {
        mCode = code;
    }
}

样本表行:

| code |
|------|
| USA  |
| UK   |

当我使用以下CrudRepository检索国家/地区时:

public interface CountryRepository extends CrudRepository

第一种情况:

mRepository.findOne("USA")

它将在我的休息api中给出以下结果:

{
  "code": "USA"
}

第二种情况:

mRepository.findOne("UsA")

它将在我的休息api中给出以下结果:

{
  "code": "UsA"
}

第三种情况:

mRepository.findOne("Usa")

它将在我的休息api中给出以下结果:

{
  "code": "Usa"
}

我还使用调试器检查了相同的行为,发现我在内存中的对象实际上具有相同的行为.

我想要的:我希望返回的数据与数据库中的数据相同.

最佳答案
正如@Bedla在评论中已经暗示的那样,您可能在数据库中使用不区分大小写的varchar数据类型.但是,这不建议用于Hibernate中的主键(通常),因为Hibernate在引用持久化上下文中的实体(如果启用了二级缓存)时依赖于id属性值唯一性.

例如,在通过“USA”加载实体然后通过“usa”加载实体(或者在“USA”已经加载之后合并分离的“usa”之后),在同一个持久化上下文中,您可能最终得到两个不同的实例在持久化上下文中,意味着它们将被单独刷新,从而覆盖彼此的更改等.

而是在数据库中使用区分大小写的数据类型,但允许通过忽略大小写进行搜索:

public interface CountryRepository extends CrudRepository

PS国家/地区代码一般不适合主键,因为它们可以更改.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读