Опция автоматического создания составного ключа Hibernate JPA - PullRequest
2 голосов
/ 23 января 2011

Я делаю проект для группового чата, который имеет следующие доменные объекты. Я хочу, чтобы orderId CommentPK автоматически увеличивался относительно предоставленного groupId. Если я использую такой метод, как GenerationType.Table, pkColumnName = "max_id_name", pkColumnValue = "max_comment_id", valueColumnName = "max_id", то orderId будет глобально уникальным, что также ограничит максимальное количество комментариев, поддерживаемых системой как ключ "max_comment_id является константой. Вместо этого я хочу использовать pkColumnValue, который может быть получен из предоставленного groupId, например. скажем, для группы 1 ключ - max_comment_group_1, для группы 2 - ключ max_comment_group_2. Я хочу использовать только спецификации JPA для этого, так что я могу дать значение переменной для поля pkColumnValue в @TableGenerator. Но любое решение для спящего режима также подойдет.

@Entity
class Group
{
 @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
 long id;
 String name;
}

@Entity
class User
{
 @TableGenerator(
         name="max_ids_generator", 
         table="max_ids", 
         pkColumnName="max_id_name",
         pkColumnValue="max_user_id",
         valueColumnName="max_id",
         initialValue=1,
         allocationSize=1
     )

 @Id 
 @GeneratedValue(strategy=GenerationType.TABLE, generator="max_ids_generator")
 long id;
 long name; 
}

@Embeddable
class CommentPK
{
 long groupId;
 long orderId; // this is the ordering of the comment, Eg. 1st comment, 2nd comment for the provided groupId.
}

@Entity
class Comment
{
 @EmbeddedId
 CommentPK commentId;
 long userId;
 String comment;
}

Заранее спасибо.

1 Ответ

0 голосов
/ 26 октября 2011

Я предложу это в качестве ответа: Hibernate JPA Sequence (не-Id) . Ответ там, кажется, делает свое дело.

...