-
Notifications
You must be signed in to change notification settings - Fork 400
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
[BUG] orm框架,主键必须命名为id,否则会出错 #108
Comments
这个有点难办,id是mongodb的不成文规定,依赖的底层驱动并没有能修改id这个字段的方法 |
这样的话很麻烦了,每个实体类的主键都必须叫做id 比如 学生的主键是学号,教师的主键是身份证号 在代码里没法给主键命名,全部都是id,有时候实体多了不好区分每个主键的含义。 |
确实如此,本身@id注解的含义就可以自定义名称,然后发现底层api不支持,有点违背初衷 |
目前是这样解决的,还有更好的办法吗? |
这样做也没有什么问题,就是多复制一个变量,问题不大 |
实际上框架可以改动为将 |
这个会有点歧义,比如我有一个@id标注的name字段,如果强制映射到_id字段,那么数据库就找不到name这个字段了 |
数据库没有该字段似乎也挺合理? |
id字段自动映射到mongodb |
收到,等我下周有时间了来实践一下。你能改的话,也可以提pr。 |
feat[orm]: id filed can use other name with @BsonId annotation 这个提交中优化了,可以不使用id作为主键名称,需要同步使用 @BsonId 这个注解 |
这个有个值得优化的点:使用zfoo的@id和@BsonId 在不同的字段,最终会使用@BsonId 的字段作为主键。已提交了一个pr,可优化这点 |
@sandogeek 我给mongodb官方提了一个pr,如果能合进去的话直接把@id注解继承@BsonId注解就可以了。 mongo-java-driver/pull/1464 现在优先使用你的这个pr方案128 解决目前需要使用两个注解的问题 |
我仔细研究了一下这个Convention,和我提的这个pr mongo-java-driver/pull/1464 关系不是非常大,是不冲突的,后面即使合进去也可以继续使用你的这个pr方案128 |
@sandogeek 另外提三点小小的优化:
|
@sandogeek mongodb官方已经决定接受这个pr mongo-java-driver/pull/1464 ,后面就等版本更新,然后两者并存 |
嗯,你有空优化一波? |
这个是你提的你改吧。。。 |
看起来已merge,看来得重新提pr了 |
根本原因是
OrmContext.getAccessor().insert()
并没有把@Id
注解的字段当作主键例如主键命名为aaa
插入数据库后会生成
{_id:'xxxxxxxxxxxx',aaa=1}
这样的数据然后使用
OrmContext.getAccessor().load(1L, UserEntity.class)
查询的时候,因为_id不是1L,所以查询不到了只有主键字段名为 id 的时候正常,这个是BUG吗,还是我使用方式错了?
The text was updated successfully, but these errors were encountered: