Поскольку Stage
является обязательным , все отношения «один ко многим», в которых задействован Stage
, будут иметь каскадное удаление по умолчанию. Это означает, что если вы удалите объект Stage
Side
Card
и потому что Card
и Side
имеют обязательные отношения один-ко-многим с каскадным удалением, включенным по умолчанию, затем он будет каскадом от Card
до Side
Итак, у вас есть два каскадных удалить пути из Stage
в Side
- что вызывает исключение.
Вы должны либо сделать Stage
необязательным, по крайней мере, в одном из объектов (т. е. удалить атрибут [Required]
из Stage
) или отключить каскадное удаление с помощью Fluent API (невозможно с аннотациями данных):
modelBuilder.Entity<Card>()
.HasRequired(c => c.Stage)
.WithMany()
.WillCascadeOnDelete(false);
modelBuilder.Entity<Side>()
.HasRequired(s => s.Stage)
.WithMany()
.WillCascadeOnDelete(false);
Механизм регулярных выражений Java не может искать в обратном направлении. Фактически, единственный известный мне механизм regex, который может это делать, - это механизм в .NET.
Вместо поиска назад, выполните итерацию по всем совпадениям в цикле (поиск вперед). Если совпадение находится до нужной вам позиции, запомните его. Если совпадение находится после нужной позиции, выйдите из цикла. В псевдокоде (мой Java немного заржавел):
storedmatch = ""
while matcher.find {
if matcher.end < offset {
storedmatch = matcher.group()
} else {
return storedmatch
}
}
Является ли строка поиска строго регулярным выражением (полный, богатый синтаксис?) Потому что, если нет, for (int j = line; j> = 0; j--)
, перевернуть строку, перевернуть совпадение и поиск вперед;)