Hi I'm new in spring and I have some problems with a composite key and many to one relation.
My classes are the following.
With the embedded Id class:
And the other side of the relation is:
I create a repository interface that extends from
The repository is scanned when the application start with the following
Now I can use that interface with the @Autowired. But my problem presents when I do this.test2ServiceRepository.findAll()
The following error presents:
org.springframework.web.util.NestedServletExceptio n: Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceU sageException: could not execute query; SQL [select test2servi0_.ip as ip8_, test2servi0_.port as port8_, test2servi0_.description as descript3_8_, test2servi0_.sbServices as sbServices8_ from TEST2_SERVICES test2servi0_]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
I have done some testing without the many to one relation and is working fine. But adding that it breaks the findall
Any help will be welcome!
Regards
My classes are the following.
Code:
@Entity
@Table(name="TEST2_SERVICES")
public class Test2Service implements Serializable {
/**
*
*/
private static final long serialVersionUID = -407995405967173101L;
@EmbeddedId
private Test2ServiceId testServiceId;
private String description;
private @Valid SbService sbServices;
@Column(name="DESCRIPTION")
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@ManyToOne(cascade=CascadeType.MERGE)
@JoinColumn(name="SERVICE_ID")
public SbService getSbServices() {
return sbServices;
}
public void setSbServices(SbService sbServices) {
this.sbServices = sbServices;
}
}
Code:
@Embeddable
public class Test2ServiceId implements Serializable {
/**
*
*/
private static final long serialVersionUID = 6572282224706486208L;
private String ip;
private Integer port;
public Test2ServiceId() {
}
@Column(name="IP")
@NotNull
@Size(min=1, max=20)
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
@Column(name="PORT")
@NotNull
public Integer getPort() {
return port;
}
public void setPort(Integer port) {
this.port = port;
}
@Override
public int hashCode() {
return this.ip.hashCode() + this.port;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Test2ServiceId){
Test2ServiceId sbTicketServiceServiceId = (Test2ServiceId) obj;
return sbTicketServiceServiceId.port == this.port && sbTicketServiceServiceId.ip.equals(this.ip);
}
return false;
}
}
Code:
@Entity
@Table(name="SERVICES")
public class SbService implements Serializable {
/**
*
*/
private static final long serialVersionUID = 3848055773985685841L;
private String id;
private String description;
private SbServiceType sbServiceType;
private Set<Test2Service> test2Services = new HashSet<Test2Service>();
@Id
@Column(name="SERVICE_ID")
@NotNull
@Size(min=2, max=6)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column(name="DESCRIPTION")
@Size(max=100)
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@ManyToOne
@JoinColumn(name="SERVICE_TYPE_ID")
public SbServiceType getSbServiceType() {
return sbServiceType;
}
public void setSbServiceType(SbServiceType sbServiceType) {
this.sbServiceType = sbServiceType;
}
@OneToMany(mappedBy="sbServices", cascade=CascadeType.MERGE)
public Set<Test2Service> getTest2Services() {
return test2Services;
}
public void setTest2Services(Set<Test2Service> test2Services) {
this.test2Services = test2Services;
}
@Override
public String toString() {
return "Id: " + this.getId() + ", tipo: " + this.getSbServiceType().getType() + ", Desc: " + this.getDescription();
}
@Transient
public String getSelectString(){
return this.getId() + " " + this.getDescription();
}
}
Code:
public interface Test2ServiceRepository extends PagingAndSortingRepository<Test2Service, Test2ServiceId>{
}
The repository is scanned when the application start with the following
Code:
<jpa:repositories base-package="com.testing.repository" entity-manager-factory-ref="emf" transaction-manager-ref="transactionManager"/>
The following error presents:
Quote:
org.springframework.web.util.NestedServletExceptio n: Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceU sageException: could not execute query; SQL [select test2servi0_.ip as ip8_, test2servi0_.port as port8_, test2servi0_.description as descript3_8_, test2servi0_.sbServices as sbServices8_ from TEST2_SERVICES test2servi0_]; nested exception is org.hibernate.exception.SQLGrammarException: could not execute query
Any help will be welcome!
Regards