@GenericGenerator (имя = генератор, стратегия = иностранный) для стандартного JPA 2

Я хотел бы знать, есть ли стандартный способ конвертировать что-то подобное

@GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "user"))
@Id
@GeneratedValue(generator = "generator")
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
    return this.id;
}

к стандартной модели JPA 2 без спящего режима

EDit: позволяет увидеть оба объекта (я оставил только аннотированную интересную часть)

@Entity
@Table(name = "author", catalog = "test")
public class Author implements java.io.Serializable {

    @GenericGenerator(name = "generator", strategy = "foreign", parameters = @Parameter(name = "property", value = "user"))
    @Id
    @GeneratedValue(generator = "generator")
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return this.id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @OneToOne(fetch = FetchType.LAZY)
    @JsonBackReference
    @PrimaryKeyJoinColumn
    public User getUser() {
        return this.user;
    }

А ТАКЖЕ

@Entity
@Table(name = "user", catalog = "test")
public class User implements java.io.Serializable {
    @OneToOne(fetch = FetchType.LAZY, mappedBy = "user")
    public Author getAuthor() {
        return this.author;
    }

person guillaume    schedule 23.10.2012    source источник
comment
какая польза от параметров = @Parameter (имя = свойство, значение = пользователь))?   -  person sparsh610    schedule 09.06.2016


Ответы (2)


Возможно, вы хотите, чтобы эти объекты имели одинаковый идентификатор. Если это так, просто добавьте в Author Class

 @OneToOne @MapsId
        public User getUser() {
        return this.user;
    }

Аннотация @MapsId поможет. Вы можете проверить здесь http://docs.oracle.com/javaee/6/api/javax/persistence/OneToOne.html (пример 2)

person lakreqta    schedule 13.12.2013

Я использую только модель JPA, поэтому я не уверен, связано ли это с сериалом (последовательностью). Если это так, то это должно выглядеть так:

@Entity
@Table(name = "project", schema = "a_schema" )
@SequenceGenerator(name = "project_id_seq_generator", sequenceName = "a_schema.project_id_sequence")
public class MyObject {

    @Id @GeneratedValue(strategy = GenerationType.AUTO, generator = "project_id_seq_generator")
    @Column(name = "project_id")
    private Long projectID;
//...
}

Надеюсь это поможет!

person fostiguy    schedule 23.10.2012
comment
спасибо, но нет, это внешний ключ (ключ отношения один к одному) - person guillaume; 24.10.2012
comment
Я не знаю, возможно ли это, но, возможно, вы могли бы попробовать использовать аннотацию @OneToOne(mappedBy=...) и/или аннотацию @PrimaryKeyJoinColumn. См. этот пример java2s.com/Code/Java/JPA/OneToOneMappedBy.htm - person fostiguy; 24.10.2012
comment
Я добавил 2 объекта, чтобы лучше понять необходимость - person guillaume; 24.10.2012