2017-02-17 25 views
0

Использование объектов Value может иметь множество преимуществ, особенно когда дело доходит до строгой строгости. Использование PersonKey для использования Person (где PersonKey действительно завернуто в Long) намного безопаснее, чем использование Long или String as-is. Мне было интересно, что рекомендуемая стратегия борьбы с этим в Spring Data - это, однако. Настройка Repository, конечно, вопрос, например, с помощьюРекомендуемая стратегия использования объектов Value для идентификаторов в Spring Data

public interface PersonRepository CrudRepository<Person, PersonKey> { 
} 

но мне было интересно, что лучший способ сделать класс PersonKey бы, имея его карту легко. Есть ли лучший вариант, чем использование EmbeddedKey?

+0

Вы взглянули на «пользовательские типы»? https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/usertype/UserType.html –

ответ

1

Для этого есть две аннотации: IdClass или EmbeddedId. Я бы рекомендовал использовать EmbeddedId, потому что вам не нужно повторять все ваши атрибуты вашего класса id в классе сущности.

Предположим, вы используете EmbeddedId. Это будет выглядеть следующим образом:

@Embeddable 
public class PersonKey { 

    private Long id; 
} 

@Entity 
public class Person { 

    @EmbeddedId 
    private PersonKey personKey; 
} 

И вы получите доступ к вашему идентификатору, как это: select p.personKey.id from Person p

Но с IdClass, ваш класс Person будет выглядеть следующим образом:

@Entity 
@IdClass(Person.key) 
public class Person { 

    @Id 
    private Long id; 
} 

И вас будут доступны следующие: select p.id from Person p

 Смежные вопросы

  • Нет связанных вопросов^_^