-
Notifications
You must be signed in to change notification settings - Fork 408
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in 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: