如何使Fanbatis @Column注释正确地将Fantom类属性映射到DB列?

时间:2013-11-22 22:46:53

标签: mysql sql ibatis fantom

我正在使用Fanbatis框架来访问MySQL数据库。这里的文档:http://www.talesframework.org/fanbatis/表示我可以使用@Column注释将类属性映射到具有不同名称的列:

@Column{name="xx"} - By default column name is assumed to be the field name, 
                     to change this use this annotation on a field 

我有这门课......

using fanbatis

@Table {name = "APPS"}
class App
{
  @Primary 
  Str? id
  Str? name
  @Column{name="description"}
  Str? descr
}

使用此SQL创建的APPS表:

create table APPS (
    ID              varchar(36)     not null,
    NAME            varchar(100)    not null,
    DESCRIPTION     varchar(400)    ,
    primary key (ID)
);

我正在尝试使用此DAO从数据库中检索记录

class AppDao
{
  static App? findById(Str id)
  {
    S<|
      select * from apps where id = #{id}
    |>
  }
}

我的代码编译得很好,但是当我运行它时,传入现有记录的ID,它从数据库中检索记录并设置与列名匹配的属性值,但app.descr仍然为null 。但是,如果我只是从“descr”属性中删除@Column注释并将其重命名为与列(“description”)匹配,那么代码运行正常并返回预期值。

-- Run:  auth::TestAppDao.testFindById...
Test setup!
app.id: 0615a6cb-7bda-cc40-a274-00130281bd51
app.name: MyApp
app.descr: null

TEST FAILED
sys::TestErr: Test failed: null != "MyApp descr" [sys::Str]
  fan.sys.Test.err (Test.java:206)
  fan.sys.Test.fail (Test.java:198)
  fan.sys.Test.verifyEq (Test.java:121)
  fan.sys.Test.verifyEq (Test.java:90)
  auth::TestAppDao.testFindById (TestAppDao.fan:36)
  java.lang.reflect.Method.invoke (Unknown)
  fan.sys.Method.invoke (Method.java:559)
  fan.sys.Method$MethodFunc.callList (Method.java:204)
  fan.sys.Method.callList (Method.java:138)
  fanx.tools.Fant.runTest (Fant.java:191)
  fanx.tools.Fant.test (Fant.java:110)
  fanx.tools.Fant.test (Fant.java:32)
  fanx.tools.Fant.run (Fant.java:284)
  fanx.tools.Fant.main (Fant.java:327)
Test teardown!

我做错了什么或者这是Fanbatis的错误?

1 个答案:

答案 0 :(得分:1)

这可能是由于区分大小写 - 请参阅MySQL 9.2.2. Identifier Case Sensitivity

  

虽然数据库和表名在某些情况下不区分大小写   平台,您不应该使用给定的数据库或表   同一陈述中的不同案例。以下声明   不起作用,因为它将表引用为my_table和as   MY_TABLE:

mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;

尝试:

@Column{name="DESCRIPTION"}

this question中也提到了这一点。