1

我正在使用 Ebean,并定义了这样一个模型:

@Entity
@Table(name = "users")
public class User extends Model {

    @Id
    public String id;

    public String email;

    public String name;

}

您可以看到该字段idString,并且有一个@Id注释。

现在我保存它:

User user = new User();
user.id = "abc";
user.email = "a@a.com";
Ebean.save(user);

但是当我保存它时,我发现它的值id是:1,不是abc我指定的。

我检查了sql,发现表生成:

create table users (
  id                        varchar(255) not null,
  email                     varchar(255),
  name                      varchar(255),
  constraint pk_users primary key (id))
;

create sequence users_seq;

您可以看到users_seq插入用户时使用了一个 seq。

如何定义模型或如何配置 Ebean 让它不对 @Id 字段做任何事情?让它使用我指定的值?

===========

更新

对不起,伙计们,我发现这种奇怪的行为是因为我的错误!

是的,我将它与 playframework 1 一起使用,并且我尝试为自己创建一个 play-ebean 模块。但是有一点不对:当我保存模型时,我错误地清除了 id 值

因此缺少分配的值abc,然后 Ebean 将尝试使用 seq 为其获取新值。

感谢大家的帮助,再次抱歉,下次我提问的时候会更加小心。

4

2 回答 2

3

创建另一个独特的字段并选择性地使用它不是更好的主意吗?String userCode或者其他的东西?

Play with Ebean 使用 ID 的自动递增来确保 ID 是唯一的,所以我个人没有更改这一点,因为所有文档都假设模型的 ID 是某种数字类型。

您可以考虑使用 Play 的路由通过其 string-id 查找用户,并且仍然使用 Long id 来执行基本操作。

(我是在 Play 的上下文中写的,因为我假设您在其中询问;))

于 2012-04-17T11:32:16.183 回答
1

如果您想在自己的领域进行操作,则需要扩展GenericModel而不是。我也在 PlayFramework 上下文中谈论。Model@Id

于 2012-04-17T11:53:08.187 回答