Внешний ключ показывает значение null при вставке в таблицу Child, ошибка Невозможно вставить значение NULL в столбец

Вызвано: com.microsoft.sqlserver.jdbc.SQLServerException: не удается вставить значение NULL в столбец «WHITE_LIST_UID», таблицу «ECM3.dbo.WHITE_LIST_MATCHESII»; столбец не допускает нулей. INSERT терпит неудачу.

Я много раз искал свою проблему, и я пробовал все возможные решения, но это не работает. Я пытаюсь вставить в дочернюю таблицу (WhiteListMatches) с помощью родительской таблицы (WhiteList) с отношением oneToMany , но она показывает предыдущую ошибку!

WhiteList.java (родительский)

  import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.persistence.Basic; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @Table(name = "WHITE_LISTII") public class WhiteList implements Serializable { @Id @Column(name = "WHITE_LIST_UID") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer whiteListUid; @Basic(optional = false) @Column(name = "ENTITY_NAME") private String entityName; @OneToMany(cascade = CascadeType.ALL,mappedBy = "whiteList") private List<WhiteListMatches> matches = new ArrayList<>(); public WhiteList() { } public WhiteList(Integer whiteListUid) { this.whiteListUid = whiteListUid; } public WhiteList(Integer whiteListUid, String entityName) { this.whiteListUid = whiteListUid; this.entityName = entityName; } public Integer getWhiteListUid() { return whiteListUid; } public void setWhiteListUid(Integer whiteListUid) { this.whiteListUid = whiteListUid; } public String getEntityName() { return entityName; } public void setEntityName(String entityName) { this.entityName = entityName; } public List<WhiteListMatches> getMatches() { return matches; } public void setMatches(List<WhiteListMatches> matches) { this.matches = matches; } @Override public int hashCode() { int hash = 0; hash += (whiteListUid != null ? whiteListUid.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof WhiteList)) { return false; } WhiteList other = (WhiteList) object; if ((this.whiteListUid == null && other.whiteListUid != null) || (this.whiteListUid != null && !this.whiteListUid.equals(other.whiteListUid))) { return false; } return true; } @Override public String toString() { return "com.model.datagear.entity.WhiteList[ whiteListUid=" + whiteListUid + " ]"; } } 

WhiteListMatches.java (ребенок)

 import java.io.Serializable; import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; @Entity @Table(name = "WHITE_LIST_MATCHESII") public class WhiteListMatches implements Serializable { @Id @Column(name = "ID") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "MATCH_ENTITY_NAME") private String matchEntityName; @Column(name = "MATCH_ENTITY_ADDRESS") private String matchEntityAddress; @Column(name = "MATCH_ENTITY_YEAR_OF_BIRTH") private String matchEntityYearOfBirth; @Column(name = "MATCH_ENTITY_DATE_OF_BIRTH") private String matchEntityDateOfBirth; @Column(name = "MATCH_ENTITY_PLACE_OF_BIRTH") private String matchEntityPlaceOfBirth; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "WHITE_LIST_UID", nullable = false) private WhiteList whiteList; public WhiteListMatches() { } public WhiteListMatches(Integer id) { this.id = id; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getMatchEntityName() { return matchEntityName; } public void setMatchEntityName(String matchEntityName) { this.matchEntityName = matchEntityName; } public String getMatchEntityAddress() { return matchEntityAddress; } public void setMatchEntityAddress(String matchEntityAddress) { this.matchEntityAddress = matchEntityAddress; } public String getMatchEntityYearOfBirth() { return matchEntityYearOfBirth; } public void setMatchEntityYearOfBirth(String matchEntityYearOfBirth) { this.matchEntityYearOfBirth = matchEntityYearOfBirth; } public String getMatchEntityDateOfBirth() { return matchEntityDateOfBirth; } public void setMatchEntityDateOfBirth(String matchEntityDateOfBirth) { this.matchEntityDateOfBirth = matchEntityDateOfBirth; } public String getMatchEntityPlaceOfBirth() { return matchEntityPlaceOfBirth; } public void setMatchEntityPlaceOfBirth(String matchEntityPlaceOfBirth) { this.matchEntityPlaceOfBirth = matchEntityPlaceOfBirth; } public WhiteList getWhiteList() { return whiteList; } public void setWhiteList(WhiteList whiteList) { this.whiteList = whiteList; } @Override public int hashCode() { int hash = 0; hash += (id != null ? id.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof WhiteListMatches)) { return false; } WhiteListMatches other = (WhiteListMatches) object; if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) { return false; } return true; } @Override public String toString() { return "com.model.datagear.entity.WhiteListMatches[ id=" + id + " ]"; } } 

вставить метод

 public void inertIntoWhiteList(String entityName, Set<Party> parties) { Transaction tx = null; List<WhiteListMatches> matches = new ArrayList<>(); Iterator it = parties.iterator(); while (it.hasNext()) { Party p = (Party) it.next(); WhiteListMatches w = createWhiteListMatch(p); matches.add(w); } try { hibernateSession = getSession(); tx = hibernateSession.beginTransaction(); WhiteList whiteListEntity = new WhiteList(); whiteListEntity.setEntityName(entityName); for (WhiteListMatches wl : matches) { whiteListEntity.getMatches().add(wl); } hibernateSession.save(whiteListEntity); } catch (Exception ex) { ex.printStackTrace(); } finally { tx.commit(); hibernateSession.close(); } } 

WhitListMatche инициализируется из Set<Party> помощью вспомогательного метода createWhitListMatch если кто-то задается вопросом, откуда этот список получил свои данные. Все мои ПК тоже являются идентификаторами в БД.

 private WhiteListMatches createWhiteListMatch(Party party) { WhiteListMatches whiteListMatch = new WhiteListMatches(); whiteListMatch.setMatchEntityAddress(party.getADDRESS()); if (party.getX_BIRTH_DT() != null) { whiteListMatch.setMatchEntityDateOfBirth(party.getX_BIRTH_DT().toString()); } whiteListMatch.setMatchEntityName(party.getENTITY_NAME()); whiteListMatch.setMatchEntityPlaceOfBirth(party.getPLACE_OF_BIRTH()); whiteListMatch.setMatchEntityYearOfBirth("" + party.getX_YEAR_OF_BIRTH()); return whiteListMatch; } 

Hibernate не делает дополнительной работы для вас. Поэтому, если у вас есть WhiteListMatches с whiteList == null Hibernate сохраняет этот null в базе данных.

Вы можете сделать что-то вроде этого:

 for (WhiteListMatches wl : matches) { wl.setWhiteList(whiteListEntity); whiteListEntity.getMatches().add(wl); } 

Также общепринятой практикой является такой метод в WhiteList

 public void addMatches(List<WhiteListMatches> matches) { for (WhiteListMatches wl : matches) { wl.setWhiteList(this); this.matches.add(wl); } } 
  • Как вы отлаживаете хранимую процедуру на Microsoft SQL Server, который был вызван из отдельной java-программы?
  • org.hsqldb.HsqlException: неожиданный токен: WITH
  • Используйте SET DATEFORMAT YMD в SQL Server перед java jdbc PreparedStatement
  • Дата JDBC для даты SQL
  • Обновить запись, если идентификатор существует еще. Вставить значения
  • Почему наш пул подключения пул?
  • Драйвер JDBC не поддерживает пакетное обновление с извлечением столбца идентификации. Зачем?
  • какую сортировку использовать, если я хочу, чтобы мои типы nvarchar были отсортированы в том же порядке на сервере sql, что и в java, используя unicode
  • Hibernate не правильно сохраняет ZonedDateTime как datetimeoffset в SQL Server
  • Как выполнить несколько операторов SQL с помощью Java?
  • Как настроить источник данных SQL Server в JBoss для подключения с использованием определенного пользователя Active Directory?
  • Interesting Posts

    Разделить столбцы с разделителями с разделителями с запятой на несколько столбцов

    Как передать список параметров хранимой процедуре и выполнить пакетную вставку в SQL Server

    Чтение метаданных служб Analysis Services SQL

    Почему семантическая проверка для инструкции ddl внутри if существует в mssql?

    Присвоить строку переменной в аргументе case в предложении THEN

    SQL Server 2005: сопоставьте Transaction_ID с @@ SPID

    Не удается подключиться к SQL Server 2014 с использованием ODBC

    Как построить единую строку из многострочного подмножества в SQlLSERVER

    Как CQRS помогает уменьшить конфликт блокировки, когда приемникам по-прежнему необходимо обновить свой магазин для чтения?

    Буферизация по сравнению с потоковой передачей большого набора данных

    Выражение небулевого типа, указанное в контексте, где ожидается условие, рядом с «END»

    Почему пул инструментов пуст в оболочке VS 2010, используемой инструментами данных SQL Server?

    Строка подключения SQL Server, указанная без имени компьютера? Как это может быть?

    Как создать домен с привязкой сущности объекта на другом сервере sql с поддержкой NHibernate

    Восстановление из резервных файлов на основном сервере в среде синхронного зеркалирования

    Давайте будем гением компьютера.