Похоже, эта ошибка может возникнуть, если отсутствует файл DICOM ImageOrientationPatient, ImagePositionPatient или PixelSpacing. Без них никакая программа не сможет определить правильную геометрию вашего тома.
См. https://github.com/canlab/spm12/blob/master/spm_dicom_convert.m# L1403 для ошибки кода.
Если у вас есть расширенный файл MR, может потребоваться преобразовать его в серию устаревших МР-изображений (вы можете попробовать MRIConvert или другой инструмент для этого). Я не знаком с SPM, поэтому я не знаю, поддерживается ли Enhanced MR, но, конечно же, будет серия стандартных МР-изображений.
Чтобы добиться того, что вы просили, я настроил ваши таблицы следующим образом:
CREATE TABLE b (
dbid INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
);
CREATE TABLE a (
b_id int(11) NOT NULL PRIMARY KEY REFERENCES b(dbid) ON DELETE CASCADE
);
CASCADE DELETE
не было добавлено в ваш DDL.
Это включит каскадное удаление. Чтобы удалить запись b
об удалении a
, я сделал следующие изменения в классе A
:
@Entity
@Table(name = "a")
public class A {
@Id
@Column(name = "b_id")
@GeneratedValue(generator = "gen")
@GenericGenerator(name = "gen", strategy = "foreign", parameters = @Parameter(name="property", value="b"))
private Integer bId;
@OneToOne(cascade = CascadeType.REMOVE, orphanRemoval = true)
@PrimaryKeyJoinColumn
private B b;
}
Это сработало хорошо. Я надеюсь, что это помогает.
попробуйте с кодом ниже -
@OneToOne(mappedBy = "b",cascade = CascadeType.ALL,fetch = FetchType.LAZY,orphanRemoval=true )
private A a;
С точки зрения только стороны MySQL вашей реализации записи в таблице B не имеют «знания» о какой-либо записи в таблице A. В базе данных связь является однонаправленной
Встроенная каскадная функциональность существует для предотвращения ошибок внешнего ключа, указав БД, что делать при удалении записи, внешний ключ не будет указывать никуда. Удаление записи таблицы A не приведет к ошибке внешнего ключа ни в одной записи таблицы B, поэтому любые функции собственного каскада не сработают
Повторение; Вы не можете сохранить схему такой же, и каскадное удаление из a
в b
, потому что у вас нет каскадного удаления из a
в b
Чтобы получить автоматическое удаление описанных вами записей таблицы B, у вас есть несколько вариантов Что касается БД:
Может быть что-то в JPA, что решает вашу дилемму из коробки, но под капотом это будет делать одно из перечисленных выше (не вариант 1, а, вероятно, вариант 4)
Если вы хотите удалить объект из B
, всякий раз, когда удаляется связанный A
(это четвертый пункт вашего списка желаний:
Я хочу каскадное удаление, которое удаляет связанный [ 113] когда
blockquote>a
удалено, вам нужно изменить отображение в
A
на:@OneToOne(cascade = CascadeType.REMOVE, orphanRemoval = true) @PrimaryKeyJoinColumn private B b;
Можете ли вы попробовать в классе B добавить следующее
@OneToOne(mappedBy = "b", cascade = CascadeType.REMOVE)
private A a;
Кроме того, если в базе данных у вас есть только внешний ключ «a имеет внешний ключ к b», вы также можете сделать внешний ключ от б до а.