Spring boot 未找到类型咨询的属性咨询!穿越路径:Consultant.consultancy
我正在开发一个spring启动应用程序。我有以下型号:Spring boot 未找到类型咨询的属性咨询!穿越路径:Consultant.consultancy,spring-boot,spring-data-jpa,Spring Boot,Spring Data Jpa,我正在开发一个spring启动应用程序。我有以下型号: @Entity @Table(name = "consultant") public class Consultant { @Id @GeneratedValue(generator = "id_generator") @SequenceGenerator( name = "id_generator", sequenceName = "id_sequence",
@Entity
@Table(name = "consultant")
public class Consultant {
@Id
@GeneratedValue(generator = "id_generator")
@SequenceGenerator(
name = "id_generator",
sequenceName = "id_sequence",
initialValue = 1
)
private Long consultant_id;
@Column(nullable = false)
private String consultant_first_name;
@Column(nullable = false)
private String consultant_last_name;
@Column(nullable = false)
private String consultant_phone;
@Column(nullable = false)
private String consultant_email;
@Column(nullable = false)
private String consultant_password;
@Column(nullable = false)
private boolean consultant_is_admin;
@ManyToOne
@JoinColumn(name = "consultancy_id", nullable = false)
private Consultancy consultancy;
public Consultant(){}
public Consultant(String consultant_first_name, String consultant_last_name, String consultant_phone, String consultant_email, String consultant_password, boolean consultant_is_admin, Consultancy consultancy) {
this.consultant_first_name = consultant_first_name;
this.consultant_last_name = consultant_last_name;
this.consultant_phone = consultant_phone;
this.consultant_email = consultant_email;
this.consultant_password = consultant_password;
this.consultant_is_admin = consultant_is_admin;
this.consultancy = consultancy;
}
public Long getConsultant_id() {
return consultant_id;
}
public void setConsultant_id(Long consultant_id) {
this.consultant_id = consultant_id;
}
public String getConsultant_first_name() {
return consultant_first_name;
}
public void setConsultant_first_name(String consultant_first_name) {
this.consultant_first_name = consultant_first_name;
}
public String getConsultant_last_name() {
return consultant_last_name;
}
public void setConsultant_last_name(String consultant_last_name) {
this.consultant_last_name = consultant_last_name;
}
public String getConsultant_phone() {
return consultant_phone;
}
public void setConsultant_phone(String consultant_phone) {
this.consultant_phone = consultant_phone;
}
public String getConsultant_email() {
return consultant_email;
}
public void setConsultant_email(String consultant_email) {
this.consultant_email = consultant_email;
}
public String getConsultant_password() {
return consultant_password;
}
public void setConsultant_password(String consultant_password) {
this.consultant_password = consultant_password;
}
public boolean isConsultant_is_admin() {
return consultant_is_admin;
}
public void setConsultant_is_admin(boolean consultant_is_admin) {
this.consultant_is_admin = consultant_is_admin;
}
public Consultancy getConsultancy() {
return consultancy;
}
public void setConsultancy(Consultancy consultancy) {
this.consultancy = consultancy;
}
}
及
我想获得具有特定咨询id的咨询师。我的J假设如下:
public interface ConsultantRepository extends JpaRepository<Consultant, Long> {
public List<Consultant> findAllByConsultancy_Consultancy_id(Long id);
}
public interface ConsultantRepository扩展了JpaRepository{
公共列表findAllByConsultancy\u Consultancy\u id(长id);
}
运行应用程序时,会出现以下错误:
Caused by:
org.springframework.data.mapping.PropertyReferenceException: No property consultancy found for type Consultancy! Traversed path: Consultant.consultancy.
at org.springframework.data.mapping.PropertyPath.<init>(PropertyPath.java:94) ~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:358) ~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:334) ~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
at org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:318) ~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
at org.springframework.data.mapping.PropertyPath.lambda$from$0(PropertyPath.java:290) ~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
at java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330) ~[na:na]
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:269) ~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
at org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:252) ~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
at org.springframework.data.repository.query.parser.Part.<init>(Part.java:81) ~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
at org.springframework.data.repository.query.parser.PartTree$OrPart.lambda$new$0(PartTree.java:250) ~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na]
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]
at org.springframework.data.repository.query.parser.PartTree$OrPart.<init>(PartTree.java:251) ~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
at org.springframework.data.repository.query.parser.PartTree$Predicate.lambda$new$0(PartTree.java:380) ~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) ~[na:na]
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]
at org.springframework.data.repository.query.parser.PartTree$Predicate.<init>(PartTree.java:381) ~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
at org.springframework.data.repository.query.parser.PartTree.<init>(PartTree.java:96) ~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:76) ~[spring-data-jpa-2.0.10.RELEASE.jar:2.0.10.RELEASE]
... 68 common frames omitted
由以下原因引起:
org.springframework.data.mapping.PropertyReferenceException:未找到类型咨询的属性咨询!穿越路径:Consultant.consultancy。
在org.springframework.data.mapping.PropertyPath.(PropertyPath.java:94)~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
在org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:358)~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
在org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:334)~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
在org.springframework.data.mapping.PropertyPath.create(PropertyPath.java:318)~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
在org.springframework.data.mapping.PropertyPath.lambda$from$0(PropertyPath.java:290)~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
在java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330)~[na:na]
在org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:269)~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
在org.springframework.data.mapping.PropertyPath.from(PropertyPath.java:252)~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
在org.springframework.data.repository.query.parser.Part.(Part.java:81)~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
在org.springframework.data.repository.query.parser.PartTree$OrPart.lambda$new$0(PartTree.java:250)~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
在java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)~[na:na]
在java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)~[na:na]
在java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)~[na:na]
在java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)~[na:na]
在java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)~[na:na]
在java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)~[na:na]
在java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)~[na:na]
在java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)~[na:na]
在org.springframework.data.repository.query.parser.PartTree$OrPart.(PartTree.java:251)~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
在org.springframework.data.repository.query.parser.PartTree$Predicate.lambda$new$0(PartTree.java:380)~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
在java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)~[na:na]
在java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)~[na:na]
在java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)~[na:na]
在java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)~[na:na]
在java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)~[na:na]
在java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)~[na:na]
在java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)~[na:na]
在java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)~[na:na]
在org.springframework.data.repository.query.parser.PartTree$Predicate.(PartTree.java:381)~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
在org.springframework.data.repository.query.parser.PartTree.(PartTree.java:96)~[spring-data-commons-2.0.10.RELEASE.jar:2.0.10.RELEASE]
在org.springframework.data.jpa.repository.query.PartTreeJpaQuery.(PartTreeJpaQuery.java:76)~[spring-data-jpa-2.0.10.RELEASE.jar:2.0.10.RELEASE]
... 省略68个公共框架
我如何在不必编写整个查询的情况下使用查询id进行映射?我可以进行两次调用,一次是从ID获取咨询,然后在JPA函数参数中传递咨询,但我想在对数据库的一次调用中完成。请帮忙。问题出在这里
public List<Consultant> findAllByConsultancy_Consultancy_id(Long id);
检查一下,应该能用
注意:始终保持标准,尽量避免使用consultant\u first\u name
,而是使用consultantFirstName
希望有帮助。您的最终目标是检索与特定咨询相关的所有顾问。这是咨询方的一对一关系和咨询方的一对一关系,前提是特定咨询方可以在给定时间点与单个咨询方关联。实现这一目标需要两件事
id
字段的Spring数据JPA约定。为此,我将字段命名为consultancyId
,并使用@列
名称-见下文@Entity
@Table(name="consultancy")
public class Consultancy {
@Id
@GeneratedValue(generator = "id_generator")
@SequenceGenerator(
name = "id_generator",
sequenceName = "id_sequence",
initialValue = 1
)
@Column(name= "consultancy_id", nullable = false)
private Long consultancyId;
@Column(nullable = false)
private String consultancy_name;
@Column(unique = true, nullable = false)
private String consultancy_email;
@Column(nullable = false)
private String consultancy_phone;
@Column(nullable = false)
private String consultancy_website;
@Column(nullable = false)
private String consultancy_address;
@OneToMany(targetEntity = Consultant.class, fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@JoinTable(name = "consultant_consultancy_join_table",
joinColumns = @JoinColumn(name = "consultancy_id"),
inverseJoinColumns = @JoinColumn(name = "consultant_id"))
@Fetch(value = FetchMode.SUBSELECT)
private Collection<Consultant> consultants;
public Consultancy() {
}
public Consultancy(String consultancy_name, String consultancy_email, String consultancy_phone, String consultancy_website, String consultancy_address) {
this.consultancy_name = consultancy_name;
this.consultancy_email = consultancy_email;
this.consultancy_phone = consultancy_phone;
this.consultancy_website = consultancy_website;
this.consultancy_address = consultancy_address;
}
public Long getConsultancyId() {
return consultancyId;
}
public void setConsultancyId(Long consultancyId) {
this.consultancyId = consultancyId;
}
public String getConsultancy_name() {
return consultancy_name;
}
public void setConsultancy_name(String consultancy_name) {
this.consultancy_name = consultancy_name;
}
public String getConsultancy_email() {
return consultancy_email;
}
public void setConsultancy_email(String consultancy_email) {
this.consultancy_email = consultancy_email;
}
public String getConsultancy_phone() {
return consultancy_phone;
}
public void setConsultancy_phone(String consultancy_phone) {
this.consultancy_phone = consultancy_phone;
}
public String getConsultancy_website() {
return consultancy_website;
}
public void setConsultancy_website(String consultancy_website) {
this.consultancy_website = consultancy_website;
}
public String getConsultancy_address() {
return consultancy_address;
}
public void setConsultancy_address(String consultancy_address) {
this.consultancy_address = consultancy_address;
}
public Collection<Consultant> getConsultants() {
return consultants;
}
public void setConsultants(Collection<Consultant> consultants) {
this.consultants = consultants;
}
}
@Entity
@Table(name = "consultant")
public class Consultant {
@Id
@GeneratedValue(generator = "id_generator")
@SequenceGenerator(
name = "id_generator",
sequenceName = "id_sequence",
initialValue = 1
)
private Long consultant_id;
@Column(nullable = false)
private String consultant_first_name;
@Column(nullable = false)
private String consultant_last_name;
@Column(nullable = false)
private String consultant_phone;
@Column(nullable = false)
private String consultant_email;
@Column(nullable = false)
private String consultant_password;
@Column(nullable = false)
private boolean consultant_is_admin;
@OneToOne(targetEntity = Consultancy.class, fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@JoinTable(name = "consultant_consultancy_join_table",
joinColumns = @JoinColumn(name = "consultant_id"),
inverseJoinColumns = @JoinColumn(name = "consultancy_id"))
private Consultancy consultancy;
public Consultant(){}
public Consultant(String consultant_first_name, String consultant_last_name, String consultant_phone, String consultant_email, String consultant_password, boolean consultant_is_admin, Consultancy consultancy) {
this.consultant_first_name = consultant_first_name;
this.consultant_last_name = consultant_last_name;
this.consultant_phone = consultant_phone;
this.consultant_email = consultant_email;
this.consultant_password = consultant_password;
this.consultant_is_admin = consultant_is_admin;
this.consultancy = consultancy;
}
public Long getConsultant_id() {
return consultant_id;
}
public void setConsultant_id(Long consultant_id) {
this.consultant_id = consultant_id;
}
public String getConsultant_first_name() {
return consultant_first_name;
}
public void setConsultant_first_name(String consultant_first_name) {
this.consultant_first_name = consultant_first_name;
}
public String getConsultant_last_name() {
return consultant_last_name;
}
public void setConsultant_last_name(String consultant_last_name) {
this.consultant_last_name = consultant_last_name;
}
public String getConsultant_phone() {
return consultant_phone;
}
public void setConsultant_phone(String consultant_phone) {
this.consultant_phone = consultant_phone;
}
public String getConsultant_email() {
return consultant_email;
}
public void setConsultant_email(String consultant_email) {
this.consultant_email = consultant_email;
}
public String getConsultant_password() {
return consultant_password;
}
public void setConsultant_password(String consultant_password) {
this.consultant_password = consultant_password;
}
public boolean isConsultant_is_admin() {
return consultant_is_admin;
}
public void setConsultant_is_admin(boolean consultant_is_admin) {
this.consultant_is_admin = consultant_is_admin;
}
public Consultancy getConsultancy() {
return consultancy;
}
public void setConsultancy(Consultancy consultancy) {
this.consultancy = consultancy;
}
}
insert into consultant (consultant_first_name, consultant_last_name, consultant_phone, consultant_email, consultant_password, consultant_is_admin) values
('John', 'Doe', '210-917-6789', 'john.doe@acme.com', 'work2eat', true),
('Jane', 'Doe', '210-867-7635', 'jane.doe@acme.com', 'work2eat', true);
insert into consultancy (consultancy_name, consultancy_email, consultancy_phone, consultancy_website, consultancy_address) values
('Acme Consultancy', 'info@acme.com', '210-902-8956', 'www.acme.com', '9910, Any Street, San Antonio, TX, 78210');
insert into consultant_consultancy_join_table(consultant_id, consultancy_id) values
(1,1),
(2,1);
public interface ConsultancyRepository extends CrudRepository<Consultancy, Long> {
Consultancy findByConsultancyId (Long consultancyId);
}
public class ConsultancyRepositoryTest {
@Autowired
private ConsultancyRepository consultancyRepository;
@Test
public void testGetAllConsultants() {
Consultancy consultancy = consultancyRepository.findByConsultancyId(1L);
assertNotNull(consultancy);
assertEquals(2, consultancy.getConsultants().size());
}
}
数据库模式(我使用的是Derby方言,请为您的数据库选择合适的模式):
一些测试数据:
@Entity
@Table(name="consultancy")
public class Consultancy {
@Id
@GeneratedValue(generator = "id_generator")
@SequenceGenerator(
name = "id_generator",
sequenceName = "id_sequence",
initialValue = 1
)
@Column(name= "consultancy_id", nullable = false)
private Long consultancyId;
@Column(nullable = false)
private String consultancy_name;
@Column(unique = true, nullable = false)
private String consultancy_email;
@Column(nullable = false)
private String consultancy_phone;
@Column(nullable = false)
private String consultancy_website;
@Column(nullable = false)
private String consultancy_address;
@OneToMany(targetEntity = Consultant.class, fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@JoinTable(name = "consultant_consultancy_join_table",
joinColumns = @JoinColumn(name = "consultancy_id"),
inverseJoinColumns = @JoinColumn(name = "consultant_id"))
@Fetch(value = FetchMode.SUBSELECT)
private Collection<Consultant> consultants;
public Consultancy() {
}
public Consultancy(String consultancy_name, String consultancy_email, String consultancy_phone, String consultancy_website, String consultancy_address) {
this.consultancy_name = consultancy_name;
this.consultancy_email = consultancy_email;
this.consultancy_phone = consultancy_phone;
this.consultancy_website = consultancy_website;
this.consultancy_address = consultancy_address;
}
public Long getConsultancyId() {
return consultancyId;
}
public void setConsultancyId(Long consultancyId) {
this.consultancyId = consultancyId;
}
public String getConsultancy_name() {
return consultancy_name;
}
public void setConsultancy_name(String consultancy_name) {
this.consultancy_name = consultancy_name;
}
public String getConsultancy_email() {
return consultancy_email;
}
public void setConsultancy_email(String consultancy_email) {
this.consultancy_email = consultancy_email;
}
public String getConsultancy_phone() {
return consultancy_phone;
}
public void setConsultancy_phone(String consultancy_phone) {
this.consultancy_phone = consultancy_phone;
}
public String getConsultancy_website() {
return consultancy_website;
}
public void setConsultancy_website(String consultancy_website) {
this.consultancy_website = consultancy_website;
}
public String getConsultancy_address() {
return consultancy_address;
}
public void setConsultancy_address(String consultancy_address) {
this.consultancy_address = consultancy_address;
}
public Collection<Consultant> getConsultants() {
return consultants;
}
public void setConsultants(Collection<Consultant> consultants) {
this.consultants = consultants;
}
}
@Entity
@Table(name = "consultant")
public class Consultant {
@Id
@GeneratedValue(generator = "id_generator")
@SequenceGenerator(
name = "id_generator",
sequenceName = "id_sequence",
initialValue = 1
)
private Long consultant_id;
@Column(nullable = false)
private String consultant_first_name;
@Column(nullable = false)
private String consultant_last_name;
@Column(nullable = false)
private String consultant_phone;
@Column(nullable = false)
private String consultant_email;
@Column(nullable = false)
private String consultant_password;
@Column(nullable = false)
private boolean consultant_is_admin;
@OneToOne(targetEntity = Consultancy.class, fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@JoinTable(name = "consultant_consultancy_join_table",
joinColumns = @JoinColumn(name = "consultant_id"),
inverseJoinColumns = @JoinColumn(name = "consultancy_id"))
private Consultancy consultancy;
public Consultant(){}
public Consultant(String consultant_first_name, String consultant_last_name, String consultant_phone, String consultant_email, String consultant_password, boolean consultant_is_admin, Consultancy consultancy) {
this.consultant_first_name = consultant_first_name;
this.consultant_last_name = consultant_last_name;
this.consultant_phone = consultant_phone;
this.consultant_email = consultant_email;
this.consultant_password = consultant_password;
this.consultant_is_admin = consultant_is_admin;
this.consultancy = consultancy;
}
public Long getConsultant_id() {
return consultant_id;
}
public void setConsultant_id(Long consultant_id) {
this.consultant_id = consultant_id;
}
public String getConsultant_first_name() {
return consultant_first_name;
}
public void setConsultant_first_name(String consultant_first_name) {
this.consultant_first_name = consultant_first_name;
}
public String getConsultant_last_name() {
return consultant_last_name;
}
public void setConsultant_last_name(String consultant_last_name) {
this.consultant_last_name = consultant_last_name;
}
public String getConsultant_phone() {
return consultant_phone;
}
public void setConsultant_phone(String consultant_phone) {
this.consultant_phone = consultant_phone;
}
public String getConsultant_email() {
return consultant_email;
}
public void setConsultant_email(String consultant_email) {
this.consultant_email = consultant_email;
}
public String getConsultant_password() {
return consultant_password;
}
public void setConsultant_password(String consultant_password) {
this.consultant_password = consultant_password;
}
public boolean isConsultant_is_admin() {
return consultant_is_admin;
}
public void setConsultant_is_admin(boolean consultant_is_admin) {
this.consultant_is_admin = consultant_is_admin;
}
public Consultancy getConsultancy() {
return consultancy;
}
public void setConsultancy(Consultancy consultancy) {
this.consultancy = consultancy;
}
}
insert into consultant (consultant_first_name, consultant_last_name, consultant_phone, consultant_email, consultant_password, consultant_is_admin) values
('John', 'Doe', '210-917-6789', 'john.doe@acme.com', 'work2eat', true),
('Jane', 'Doe', '210-867-7635', 'jane.doe@acme.com', 'work2eat', true);
insert into consultancy (consultancy_name, consultancy_email, consultancy_phone, consultancy_website, consultancy_address) values
('Acme Consultancy', 'info@acme.com', '210-902-8956', 'www.acme.com', '9910, Any Street, San Antonio, TX, 78210');
insert into consultant_consultancy_join_table(consultant_id, consultancy_id) values
(1,1),
(2,1);
public interface ConsultancyRepository extends CrudRepository<Consultancy, Long> {
Consultancy findByConsultancyId (Long consultancyId);
}
public class ConsultancyRepositoryTest {
@Autowired
private ConsultancyRepository consultancyRepository;
@Test
public void testGetAllConsultants() {
Consultancy consultancy = consultancyRepository.findByConsultancyId(1L);
assertNotNull(consultancy);
assertEquals(2, consultancy.getConsultants().size());
}
}
顾问库类:
@Entity
@Table(name="consultancy")
public class Consultancy {
@Id
@GeneratedValue(generator = "id_generator")
@SequenceGenerator(
name = "id_generator",
sequenceName = "id_sequence",
initialValue = 1
)
@Column(name= "consultancy_id", nullable = false)
private Long consultancyId;
@Column(nullable = false)
private String consultancy_name;
@Column(unique = true, nullable = false)
private String consultancy_email;
@Column(nullable = false)
private String consultancy_phone;
@Column(nullable = false)
private String consultancy_website;
@Column(nullable = false)
private String consultancy_address;
@OneToMany(targetEntity = Consultant.class, fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@JoinTable(name = "consultant_consultancy_join_table",
joinColumns = @JoinColumn(name = "consultancy_id"),
inverseJoinColumns = @JoinColumn(name = "consultant_id"))
@Fetch(value = FetchMode.SUBSELECT)
private Collection<Consultant> consultants;
public Consultancy() {
}
public Consultancy(String consultancy_name, String consultancy_email, String consultancy_phone, String consultancy_website, String consultancy_address) {
this.consultancy_name = consultancy_name;
this.consultancy_email = consultancy_email;
this.consultancy_phone = consultancy_phone;
this.consultancy_website = consultancy_website;
this.consultancy_address = consultancy_address;
}
public Long getConsultancyId() {
return consultancyId;
}
public void setConsultancyId(Long consultancyId) {
this.consultancyId = consultancyId;
}
public String getConsultancy_name() {
return consultancy_name;
}
public void setConsultancy_name(String consultancy_name) {
this.consultancy_name = consultancy_name;
}
public String getConsultancy_email() {
return consultancy_email;
}
public void setConsultancy_email(String consultancy_email) {
this.consultancy_email = consultancy_email;
}
public String getConsultancy_phone() {
return consultancy_phone;
}
public void setConsultancy_phone(String consultancy_phone) {
this.consultancy_phone = consultancy_phone;
}
public String getConsultancy_website() {
return consultancy_website;
}
public void setConsultancy_website(String consultancy_website) {
this.consultancy_website = consultancy_website;
}
public String getConsultancy_address() {
return consultancy_address;
}
public void setConsultancy_address(String consultancy_address) {
this.consultancy_address = consultancy_address;
}
public Collection<Consultant> getConsultants() {
return consultants;
}
public void setConsultants(Collection<Consultant> consultants) {
this.consultants = consultants;
}
}
@Entity
@Table(name = "consultant")
public class Consultant {
@Id
@GeneratedValue(generator = "id_generator")
@SequenceGenerator(
name = "id_generator",
sequenceName = "id_sequence",
initialValue = 1
)
private Long consultant_id;
@Column(nullable = false)
private String consultant_first_name;
@Column(nullable = false)
private String consultant_last_name;
@Column(nullable = false)
private String consultant_phone;
@Column(nullable = false)
private String consultant_email;
@Column(nullable = false)
private String consultant_password;
@Column(nullable = false)
private boolean consultant_is_admin;
@OneToOne(targetEntity = Consultancy.class, fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@JoinTable(name = "consultant_consultancy_join_table",
joinColumns = @JoinColumn(name = "consultant_id"),
inverseJoinColumns = @JoinColumn(name = "consultancy_id"))
private Consultancy consultancy;
public Consultant(){}
public Consultant(String consultant_first_name, String consultant_last_name, String consultant_phone, String consultant_email, String consultant_password, boolean consultant_is_admin, Consultancy consultancy) {
this.consultant_first_name = consultant_first_name;
this.consultant_last_name = consultant_last_name;
this.consultant_phone = consultant_phone;
this.consultant_email = consultant_email;
this.consultant_password = consultant_password;
this.consultant_is_admin = consultant_is_admin;
this.consultancy = consultancy;
}
public Long getConsultant_id() {
return consultant_id;
}
public void setConsultant_id(Long consultant_id) {
this.consultant_id = consultant_id;
}
public String getConsultant_first_name() {
return consultant_first_name;
}
public void setConsultant_first_name(String consultant_first_name) {
this.consultant_first_name = consultant_first_name;
}
public String getConsultant_last_name() {
return consultant_last_name;
}
public void setConsultant_last_name(String consultant_last_name) {
this.consultant_last_name = consultant_last_name;
}
public String getConsultant_phone() {
return consultant_phone;
}
public void setConsultant_phone(String consultant_phone) {
this.consultant_phone = consultant_phone;
}
public String getConsultant_email() {
return consultant_email;
}
public void setConsultant_email(String consultant_email) {
this.consultant_email = consultant_email;
}
public String getConsultant_password() {
return consultant_password;
}
public void setConsultant_password(String consultant_password) {
this.consultant_password = consultant_password;
}
public boolean isConsultant_is_admin() {
return consultant_is_admin;
}
public void setConsultant_is_admin(boolean consultant_is_admin) {
this.consultant_is_admin = consultant_is_admin;
}
public Consultancy getConsultancy() {
return consultancy;
}
public void setConsultancy(Consultancy consultancy) {
this.consultancy = consultancy;
}
}
insert into consultant (consultant_first_name, consultant_last_name, consultant_phone, consultant_email, consultant_password, consultant_is_admin) values
('John', 'Doe', '210-917-6789', 'john.doe@acme.com', 'work2eat', true),
('Jane', 'Doe', '210-867-7635', 'jane.doe@acme.com', 'work2eat', true);
insert into consultancy (consultancy_name, consultancy_email, consultancy_phone, consultancy_website, consultancy_address) values
('Acme Consultancy', 'info@acme.com', '210-902-8956', 'www.acme.com', '9910, Any Street, San Antonio, TX, 78210');
insert into consultant_consultancy_join_table(consultant_id, consultancy_id) values
(1,1),
(2,1);
public interface ConsultancyRepository extends CrudRepository<Consultancy, Long> {
Consultancy findByConsultancyId (Long consultancyId);
}
public class ConsultancyRepositoryTest {
@Autowired
private ConsultancyRepository consultancyRepository;
@Test
public void testGetAllConsultants() {
Consultancy consultancy = consultancyRepository.findByConsultancyId(1L);
assertNotNull(consultancy);
assertEquals(2, consultancy.getConsultants().size());
}
}
我不想用加入助教