Да, чтобы прокомментировать строку, содержащую определенную строку с 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» в конце означает глобальное изменение. Если вы хотите изменить только один экземпляр шаблона, просто пропустите это.
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 ...
}
Также см. здесь .
Попробуйте это
@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 ...
}
Я думаю, что вам все еще нужно свойство первичного ключа в классе OtherInfo.
@Entity
public class OtherInfo {
@Id
public int id;
@OneToOne(mappedBy="otherInfo")
public Person person;
rest of attributes ...
}
Также вам может понадобиться добавить аннотацию @PrimaryKeyJoinColumn на другую сторону сопоставления. Я знаю, что Hibernate использует это по умолчанию. Но тогда я не использовал аннотации JPA, которые, кажется, требуют, чтобы вы указали, как работает ассоциация.
Я не уверен, что вы можете использовать отношение как Id / PrimaryKey в Hibernate.