У меня есть две таблицы product и display_name, поэтому я создал следующие объекты
Код: Выделить всё
@Entity
@Table(name = "product")
@NoArgsConstructor
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true, of = "id")
@Getter
@Setter
public class Product {
@Builder
public Product(
UUID id,
...
String name) {
this.id = id
...
this.name = name;
}
@Id
@Column(name = "id", nullable = false, updatable = false, unique = true)
protected UUID id;
...
@Column(name = "name", nullable = false)
private String name;
}
Код: Выделить всё
@Entity
@Table(name = "display_name")
@NoArgsConstructor
@ToString()
@Getter
@Setter
public class DisplayName {
@Builder
public DisplayName(
String systemName,
String displayName) {
this.systemName = systemName;
this.displayName = displayName;
}
@Id
@Column(name = "system_name", nullable = false)
private String systemName;
@Column(name = "display_name", nullable = false)
private String displayName;
Код: Выделить всё
SELECT * FROM product
LEFT JOIN display_name
ON name = system_name;
поэтому я добавил несколько внешних ключей (не уверен, нужны ли они)
Код: Выделить всё
ALTER TABLE display_name
ADD CONSTRAINT fk_system_name
FOREIGN KEY (system_name) REFERENCES product (`name`) ON DELETE CASCADE;
ALTER TABLE product
ADD CONSTRAINT fk_name
FOREIGN KEY (`name`) REFERENCES display_name (system_name) ON DELETE CASCADE;
Код: Выделить всё
@OneToOne()
@JoinTable(
name = "display_name",
joinColumns = {@JoinColumn(name = "system_name")},
inverseJoinColumns = {@JoinColumn(name = "name")})
@Exclude
private DisplayName displayName;
Код: Выделить всё
public interface ProductRepository
extends JpaRepository
, JpaSpecificationExecutor {
Page findAllByName(String name);
}
Код: Выделить всё
2024-11-16 10:38:07 2024-11-16 15:38:07.706 ERROR 1 --- [io-10005-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.dao.InvalidDataAccessResourceUsageException: JDBC exception executing SQL [
select p1_0.id,p1_0.name,p1_2.name from product p1_0 left join display_name p1_2 on p1_0.id=p1_2.system_name [(conn=76324) Unknown column 'p1_2.name' in 'field list'] [n/a]; SQL [n/a]] with root cause []
2024-11-16 10:38:07
2024-11-16 10:38:07 java.sql.SQLSyntaxErrorException: (conn=76324) Unknown column 'p1_2.name' in 'field list'
Подробнее здесь: https://stackoverflow.com/questions/791 ... own-column
Мобильная версия