spring-projects / spring-data-r2dbc

Provide support to increase developer productivity in Java when using Reactive Relational Database Connectivity. Uses familiar Spring concepts such as a DatabaseClient for core API usage and lightweight repository style data access.
Apache License 2.0
708 stars 132 forks source link

mysql keyword isn't mapping to the result #861

Closed maple-seven closed 2 weeks ago

maple-seven commented 2 months ago
@Getter
@Setter
@Table("table")
public class SpotMarginUserSettingEntity {

    @Id
    private Long id;
    @Column("uid")
    private Long uid;
    @Column("`key`")
    private String key;
    @Column("value")
    private String value;
    @Column("created_at")
    private Instant createdAt;

}

The field key return null when query , if set the @Column("key") it works fine ; but it'll error when insert or update because key is a keyword in mysql;

mp911de commented 2 months ago

If you would like us to spend some time helping you to diagnose the problem, please spend some time describing it and, ideally, providing a minimal yet complete sample that reproduces the problem. You can share it with us by pushing it to a separate repository on GitHub or by zipping it up and attaching it to this issue.

maple-seven commented 2 months ago

java

@Getter
@Setter
@Table("demo")
public class Demo {
    @Id
    private Long id;
    @Column("uid")
    private Long uid;
    @Column("`key`")
    private String key;
    @Column("value")
    private String value;
    @Column("created_at")
    private Instant createdAt;
}

sql:

create table demo
(
    id         int unsigned auto_increment
        primary key,
    uid        bigint(11) unsigned default 0                 not null comment '',
    `key`      varchar(100)        default ''                not null comment '',
    value      varchar(100)        default ''                not null comment '',
    created_at datetime            default CURRENT_TIMESTAMP not null
);

INSERT INTO demo (uid, `key`, value) VALUES (10000, 'key1', '0');

query:

public interface SpotMarginUserSettingReadRepository extends R2dbcRepository<Demo, Long> {

    @Query("select * from demo where `key`= 'key1' and uid = :uid limit 1")
    Mono<Demo> getSomeDemo(long uid);
}

the field key in result is null; if i remove backtick in @Column("`key`") it works fine; but when it excutes insert or update, it will throw a bad sql error;

mp911de commented 2 months ago

R2dbcMappingContext doesn't quote identifiers by default. Can you retest when setting R2dbcMappingContext.setForceQuote(true)? I think you will have to register a custom R2dbcMappingContext bean.

spring-projects-issues commented 3 weeks ago

If you would like us to look at this issue, please provide the requested information. If the information is not provided within the next 7 days this issue will be closed.

spring-projects-issues commented 2 weeks ago

Closing due to lack of requested feedback. If you would like us to look at this issue, please provide the requested information and we will re-open the issue.