JPA Hibernate отношения один-к-одному

Да, чтобы прокомментировать строку, содержащую определенную строку с sed, просто выполните:

sed -i '/<pattern>/s/^/#/g' file

И раскомментировать ее:

sed -i '/<pattern>/s/^#//g' file

В вашем случае:

sed -i '/2001/s/^/#/g' file    (to comment out)
sed -i '/2001/s/^#//g' file    (to uncomment)

Опция «g» в конце означает глобальное изменение. Если вы хотите изменить только один экземпляр шаблона, просто пропустите это.

62
задан Steve Kuo 24 April 2009 в 21:55
поделиться

4 ответа

JPA не допускает аннотацию @Id для OneToOne или ManyToOne . То, что вы пытаетесь сделать, - это сопоставление сущностей один-к-одному с общим первичным ключом . Простейший случай - это однонаправленный один-к-одному с общим ключом:

@Entity
public class Person {
    @Id
    private int id;

    @OneToOne
    @PrimaryKeyJoinColumn
    private OtherInfo otherInfo;

    rest of attributes ...
}

Основная проблема заключается в том, что JPA не поддерживает генерацию общего первичного ключа в объекте OtherInfo . Классическая книга «Сохранение Java с Hibernate» Бауэра и Кинга дает следующее решение проблемы с использованием расширения Hibernate:

@Entity
public class OtherInfo {
    @Id @GeneratedValue(generator = "customForeignGenerator")
    @org.hibernate.annotations.GenericGenerator(
        name = "customForeignGenerator",
        strategy = "foreign",
        parameters = @Parameter(name = "property", value = "person")
    )
    private Long id;

    @OneToOne(mappedBy="otherInfo")
    @PrimaryKeyJoinColumn
    public Person person;

    rest of attributes ...
}

Также см. здесь .

85
ответ дан 24 November 2019 в 16:44
поделиться

Попробуйте это

@Entity

@Table(name="tblperson")

public class Person {

public int id;

public OtherInfo otherInfo;
@Id //Here Id is autogenerated
@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}

@OneToOne(cascade = CascadeType.ALL,targetEntity=OtherInfo.class)
@JoinColumn(name="otherInfo_id") //there should be a column otherInfo_id in Person
public OtherInfo getOtherInfo() {
    return otherInfo;
}
public void setOtherInfo(OtherInfo otherInfo) {
    this.otherInfo= otherInfo;
}
rest of attributes ...
}


@Entity

@Table(name="tblotherInfo")

public class OtherInfo {

private int id;

private Person person;

@Id

@Column(name="id")
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
    return id;
}
public void setId(Long id) {
    this.id = id;
}

  @OneToOne(mappedBy="OtherInfo",targetEntity=Person.class)   
public College getPerson() {
    return person;
}
public void setPerson(Person person) {
    this.person = person;
}    
 rest of attributes ...
}
1
ответ дан 24 November 2019 в 16:44
поделиться

Я думаю, что вам все еще нужно свойство первичного ключа в классе OtherInfo.

@Entity
public class OtherInfo {
    @Id
    public int id;

    @OneToOne(mappedBy="otherInfo")
    public Person person;

    rest of attributes ...
}

Также вам может понадобиться добавить аннотацию @PrimaryKeyJoinColumn на другую сторону сопоставления. Я знаю, что Hibernate использует это по умолчанию. Но тогда я не использовал аннотации JPA, которые, кажется, требуют, чтобы вы указали, как работает ассоциация.

4
ответ дан 24 November 2019 в 16:44
поделиться

Я не уверен, что вы можете использовать отношение как Id / PrimaryKey в Hibernate.

1
ответ дан 24 November 2019 в 16:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: