Spring-Boot/Hibernate: повторяющееся значение ключа нарушает уникальное ограничениеJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Spring-Boot/Hibernate: повторяющееся значение ключа нарушает уникальное ограничение

Сообщение Anonymous »

Я пытаюсь вставить новую запись в свою базу данных Postgresql с помощью Hibernate и Java Spring Boot.
Это моя пользовательская модель:

Код: Выделить всё

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "users")
public class UserEntity {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_id_seq")
private Long id;

private String name;

private String username;

private String password;

}
Это модель моего портфолио:

Код: Выделить всё

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "portfolioStocks")
public class PortfolioStockEntity {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "portfolioStock_id_seq")
private Long id;

@ManyToOne()
@JoinColumn(name = "stockId")
private StockEntity stock;

@ManyToOne()
@JoinColumn(name = "userId")
private UserEntity user;

private Number Quantity;

}
PortfolioStockRepository:

Код: Выделить всё

@Repository
public interface PortfolioStockRepository extends CrudRepository
 {

List findByUser(UserEntity userEntity);

}
PortfolioStockService:

Код: Выделить всё

@Service
public class PortfolioStockServiceImpl implements PortfolioStockService {
....

@Override
public PortfolioStockEntity createUpdatePortfolioStock(Long id, PortfolioStockEntity portfolioStockEntity) {
portfolioStockEntity.setId(id);
return portfolioStockRepository.save(portfolioStockEntity);
}

....
}
PortfolioStockController:

Код: Выделить всё

@RestController
public class PortfolioStockController {
....

@NoArgsConstructor
@AllArgsConstructor
private static class AddStockRequest {
public UserDto user;
public StockDto stock;
public Number quantity;
}

@PostMapping(path = "/portfolio/stock/add")
public PortfolioStockDto addPortfolioStock(@RequestBody AddStockRequest requestBody) {
UserEntity userEntity = userMapper.mapFrom(requestBody.user);
userEntity = userService.checkAuthentication(userEntity);

StockEntity stockEntity = stockMapper.mapFrom(requestBody.stock);
Optional findStockEntity = stockService.findStock(stockEntity.getSymbol());
if (findStockEntity.isEmpty())
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Stock does not exist");
else
stockEntity = findStockEntity.get();

PortfolioStockEntity portfolioStockEntity = PortfolioStockEntity.builder()
.stock(stockEntity)
.user(userEntity)
.Quantity(requestBody.quantity)
.build();

System.out.println(portfolioStockEntity);

portfolioStockEntity = portfolioStockService.createUpdatePortfolioStock(
portfolioStockEntity.getId(),
portfolioStockEntity);

return portfolioStockMapper.mapTo(portfolioStockEntity);
}

....
}
В моей базе данных уже есть объект портфолиоStock:

Код: Выделить всё

{ PortfolioStockEntity(id=2, stock=StockEntity(id=3, name=Intel Corporation, symbol=InNTC, price=95.91, lastUpdated=2025-01-14), user=UserEntity(id=2, name=test, username=test, password=test), Quantity=5) }
Но когда запрос на добавление другого объекта PortfolioStock отправляется в PortfolioStockController, выдается эта ошибка:

Код: Выделить всё

duplicate key value violates unique constraint "ukfrklsf57yxxy0h95vk4dxre5a"   Detail: Key (user_id)=(2) already exists.] [insert into portfolio_stocks (quantity,stock_id,user_id,id) values (?,?,?,?)]; SQL [insert into portfolio_stocks (quantity,stock_id,user_id,id) values (?,?,?,?)]; constraint [ukfrklsf57yxxy0h95vk4dxre5a]]
Добавить PortfolioStock:

Код: Выделить всё

{ PortfolioStockEntity(id=null, stock=StockEntity(id=2, name=NVIDIA Corporation, symbol=NVDA, price=135.91, lastUpdated=2025-01-14), user=UserEntity(id=2, name=test, username=test, password=test), Quantity=5) }


Подробнее здесь: https://stackoverflow.com/questions/793 ... constraint
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»