如何让ebean不为ID生成任何值?

Posted

技术标签:

【中文标题】如何让ebean不为ID生成任何值?【英文标题】:How to let ebean not generate any value for the ID? 【发布时间】:2012-04-17 11:09:11 【问题描述】:

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

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

    @Id
    public String id;

    public String email;

    public String name;


你可以看到id这个字段是String,并且有一个@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;

可以看到有一个seq users_seq,在插入用户的时候已经使用了。

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

============

更新

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

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

所以分配的值abc 丢失了,那么Ebean 将尝试使用seq 来为其获取新值。

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

【问题讨论】:

@DataNucleus,既然Ebean跟着jpa,我觉得可以是“JPA”问题 应该是一般问题,我现在也在玩。 我说这是一个“JPA”问题,因为JPA中可能有一些注释可以改变这种行为,虽然我不知道是否有:) 【参考方案1】:

创建另一个唯一字段并选择性地使用它不是更好的主意吗? String userCode 什么的?

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

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

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

【讨论】:

【参考方案2】:

如果你想对自己的@Id字段进行操作,你需要扩展GenericModel而不是Model。我也在 PlayFramework 上下文中讨论。

【讨论】:

我对你建议的 GenericModel 很好奇,但是 2.0 API 在 play.db.ebean 中没有这样的类,我错过了什么吗? GenericModel 存在于 Play 1.x 中。我不确定 2.0 API

以上是关于如何让ebean不为ID生成任何值?的主要内容,如果未能解决你的问题,请参考以下文章

Play Ebean 从 2.4 升级到 2.5 后不生成 Id

如何在sql中插入记录时返回id(id为自动增长)

需要帮助上课吗?可能很简单

如何使用jquery生成动态输入并通过id获取值

java生成唯一ID

如何让 Jade 停止 HTML 编码元素属性,并生成文字字符串值?