Как создать уникальные идентификаторы для дочерних объектов, содержащих ключевые поля? - PullRequest
0 голосов
/ 07 сентября 2010

В приведенном ниже демонстрационном коде User является родительским объектом с отношением один-ко-многим с BlogPost.

Поскольку BlogPost является потомком User, его поле первичного ключа не может быть автоматически сгенерированным значением long, но должно быть объектом Key, экземпляром которого является KeyFactory.

В данный момент я передаю BlogPost blogTitle (не гарантированно уникальный) методу createKey при создании экземпляра Key для BlogPost

Но я не знаю, как сгенерировать уникальное значение идентификатора для BlogPost?

@Entity
public class BlogPost {

    @Id
    private Key key;
    private String blogTitle;
    private Text blogText;

    @ManyToOne(fetch = FetchType.LAZY)
    private User user;

    public BlogPost(Key parentKey, String blogTitle) {
      this.key = KeyFactory.createKey(parentKey, "BlogPost", blogTitle);
    }
}

@Entity
public class User {

    @Id
    private Key key;
    private String username;
    private String email;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
    private List<BlogPost> blogPosts;

    public User(String username){
      this.key = KeyFactory.createKey("User", username);
    }
}

1 Ответ

2 голосов
/ 07 сентября 2010

Вы все еще можете использовать автоматически сгенерированный ключ; просто используйте это:

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key;

Идентификаторы, сгенерированные таким образом, будут уникальными для данной родительской сущности, поэтому для уникальной идентификации записи вам понадобится идентификатор или имя объекта User и идентификатор BlogPost.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...