2011-09-13 86 views

回答

6

首先不要在模型中扩展(play.db.jpa.Model)模型,而是使用GenericModel来生成Id。

然后你可以使用助手类,当创建对象(在构造函数中)时调用。

或致电助手类的保存时(因此我必须创建包装DAO,保存过程中包装DAO在这个对象不是这样我就可以生成ID保存对象)

,或者如果您想要更简单的方法使用JPA UUID。见下面的代码。

@Entity 
public class User extends GenericModel { 
    @Id 
    @GeneratedValue(generator = "system-uuid") 
    @GenericGenerator(name = "system-uuid", strategy = "uuid") 
    public String id; 
} 
+0

GenericModel:不是反模式吗?请参阅:http://en.wikipedia.org/wiki/BaseBean – Kowser

+0

请参阅维基的评论和维基的中立性,这些维基的中立性说“这篇文章的中立性是有争议的”,所以称这种反模式不合适。 – indrap

+0

是的,我明白了。需要研究更多以澄清问题。 – Kowser

5

好吧,Model类只是GenericModel的一个子类,它添加了属性,方法和注释,以便为模型类提供生成的Long作为@Id属性。

如果你不想这样做,你可以继承GenericModel,并提供你自己的@Id。在你的情况下,这将是一个字符串来保存UUID。不过,您需要提出在新模型实例上初始化它的策略。

我不知道JPA提供的内置策略来生成UUID。一个简单的方法是创建一个助手类,您可以调用一个方法来获取新的UUID,并确保每次创建新模型时调用该类。