我的 .net 解决方案中有三个项目。
主项目和两个类库项目。
我发现我需要交叉引用类库项目。
我可以这样做吗?安全吗还是有一些注意事项?
我有双向关系
@Entity
@Table(name = "facility")
public class Facility implements Serializable {
@Id
@GeneratedValue
private Long id;
@OneToMany(mappedBy = "facility")
private Set<Amenity> amenities;
}
@Entity
@Table(name = "amenity")
public class Amenity implements Serializable {
@Id
@GeneratedValue
private Long id;
@ManyToOne
private Facility facility;
}
Run Code Online (Sandbox Code Playgroud)
这一切都工作正常,我可以看到表已正确创建。我可以通过休息端点添加数据,但只有当我想直接进入相反的方向并获得便利设施时,我才遇到这个问题。它看起来像是进入了一个无限循环,设施调用设施调用设施调用设施等等。就像有一些循环引用一样。我已经搜索了高低、远近和广泛,并遵循了许多示例,所有示例似乎都以类似的方式设置了实体。为了简洁起见,我省略了 getter 和 setter。我预计在它获得第一个便利设施后它会停止。
[
{
"id": 1,
"facilityName": "asdf",
"facilityCode": "asdf",
"amenities": [
{
"id": 15,
"amenityType": "amenity 1",
"facility": {
"id": 1,
"facilityName": "asdf",
"facilityCode": "asdf",
"amenities": [
{
Run Code Online (Sandbox Code Playgroud) 在 Kotlin 中,假设我有data class A (val f: B)和data class B (val f: A)。我想初始化 localvar a: A等var b: Bisa.f和bis b.f。并且必须保留 vals。这种循环实例化可能吗?aA.fB.f
data class A(val f: B)
data class B(val f: A)
fun foo() {
var a: A
var b: B
// instantiate a and b here with a.f == b and b.f == a ??
}
Run Code Online (Sandbox Code Playgroud) 我遇到了与 Symfony 中的循环引用相关的问题,我怀疑是由序列化程序引起的,但我还没有找到任何答案。这是我创建的实体、路由和控制器。在这方面的任何建议将不胜感激。
用户名
class User
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="Dieta", mappedBy="user")
*/
private $dietas;
public function __construct()
{
$this->dietas = new ArrayCollection();
}
//...
//...
}
Run Code Online (Sandbox Code Playgroud)
饮食.php
class Dieta
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="dietas")
* @ORM\JoinColumn(name="users_id", referencedColumnName="id")
*/
private $user;
public function __construct()
{
$this->user = new ArrayCollection();
}
//... …Run Code Online (Sandbox Code Playgroud) 因此,如果我有一个列表a并附a加到它,我将得到一个包含它自己的引用的列表。
>>> a = [1,2]
>>> a.append(a)
>>> a
[1, 2, [...]]
>>> a[-1][-1][-1]
[1, 2, [...]]
Run Code Online (Sandbox Code Playgroud)
这基本上会导致看似无限的递归。
不仅在列表中,在字典中也是如此:
>>> b = {'a':1,'b':2}
>>> b['c'] = b
>>> b
{'a': 1, 'b': 2, 'c': {...}}
Run Code Online (Sandbox Code Playgroud)
这可能是将列表存储在最后一个元素中并修改其他元素的好方法,但这不会起作用,因为在每个递归引用中都会看到更改。
我明白为什么会发生这种情况,即由于它们的可变性。但是,我对这种行为的实际用例很感兴趣。有人可以启发我吗?
我正在尝试表示状态转换图,并且我想使用 Java 枚举来实现此目的。我很清楚,还有许多其他方法可以使用Map<K, V>或可能使用枚举中的静态初始化块来完成此操作。但是,我试图理解为什么会发生以下情况。
这是我正在尝试做的一个(极其)简化的示例。
enum RPS0
{
ROCK(SCISSORS),
PAPER(ROCK),
SCISSORS(PAPER);
public final RPS0 winsAgainst;
RPS0(final RPS0 winsAgainst)
{
this.winsAgainst = winsAgainst;
}
}
Run Code Online (Sandbox Code Playgroud)
显然,由于非法的前向引用而失败。
ScratchPad.java:150: error: illegal forward reference
ROCK(SCISSORS),
^
Run Code Online (Sandbox Code Playgroud)
没关系,我接受这一点。尝试手动插入SCISSORS需要Java尝试和设置SCISSORS,然后触发设置PAPER,然后触发设置ROCK,导致无限循环。那么我可以很容易地理解为什么这种直接引用是不可接受的,并且会因编译器错误而被禁止。
因此,我尝试对 lambda 进行同样的操作。
ScratchPad.java:150: error: illegal forward reference
ROCK(SCISSORS),
^
Run Code Online (Sandbox Code Playgroud)
它失败了,并出现基本相同的错误。
ScratchPad.java:169: error: illegal forward reference
ROCK(() -> SCISSORS),
^
Run Code Online (Sandbox Code Playgroud)
我对此有点困扰,因为我真的觉得 lambda 应该让它不会失败。但不可否认的是,我对 lambda 表达式的规则、范围和边界了解不够,无法形成更坚定的观点。
顺便说一句,我尝试添加花括号并返回 lambda,但这也没有帮助。
所以,我尝试了一个匿名类。
enum RPS1
{
ROCK(() -> SCISSORS),
PAPER(() …Run Code Online (Sandbox Code Playgroud) 我在循环参考/依赖方面遇到了一些问题,我一整天都在这里.我的思维过程肯定有问题,我只是不明白.
这是我的项目:
Flip.Main (ASP.NET MVC)
Flip.Domain (C# DLL)
Flip.Services (C# DLL)
Flip.Utility (C# DLL)
Run Code Online (Sandbox Code Playgroud)
Flip.Main -> Flip.Domain, Flip.Services, Flip.Utility
Flip.Services -> Flip.Domain, Flip.Utility
Flip.Domain -> Flip.Utility
Run Code Online (Sandbox Code Playgroud)
Flip.Main (ASP.NET MVC)
Flip.Domain (C# DLL)
Flip.Services (C# DLL)
Flip.Utility (C# DLL)
Run Code Online (Sandbox Code Playgroud)
我想以我的服务项目拥有所有服务的方式构建我的项目,我的域项目模型,存储库和'流利'扩展来查询模型,主要和实用程序项目几乎是自我解释.
遇到的问题:
1)我的Flip.Services项目中有一个EmailService,需要发送本地化的电子邮件.所有本地化都在Flip.Main的App_GlobalResources中完成.不知道如何将强类型电子邮件和其他本地化资源现在提供给我的服务层,因为Flip.Main已经依赖于服务层,因此我可以让它依赖于Main项目.
2)我有业务类,例如CustomerSearchFilter,它代表强类型搜索查询.我想在Flip.Domain项目之外的那些业务类,因为它们不是域模型的一部分.但是,在我的CustomerSearchFilter类中,我有域类实例(例如CustomerGroup),因此需要了解域类.同时我的Flip.Domain项目中的Fluent接口需要知道CustomerSearchFilter是什么,所以我可以将它应用到我的IQueryable接口.再次循环引用.
3)我有一个自定义[AuthorizeSessionState]属性,我用它来装饰我的ASP.NET MVC Flip.Main项目中的特定控制器操作.这是一个ActionFilterAttribute,需要实例化驻留在Flip.Services项目中的SessionService.我不能把它放到我的Utility类中(因为Flip.Services已经引用了Flip.Utility).我不认为他们应该在Flip.Main中 - 我是否必须为此制作另一个项目!?
(另外20个)
我觉得我在某个地方犯了一个错误,特别是当我读到别人通常不会遇到循环引用问题时.救命?
我正在为访问数据库创建一个sql select查询,并收到一个循环引用错误,因为我的别名与我的表达式中的列名相同.这是我的查询的片段:
switch([CULET]='N','NONE', [CULET]='S', 'SMALL',[CULET]='VS','VERY SMALL', [CULET]='SL',' ',[CULET]='MD',' ') AS [Culet]
Run Code Online (Sandbox Code Playgroud)
此特定别名是输出要求的一部分.有没有办法绕过这个而不改变别名?
TIA
我有一个python对象,它本质上是其他对象实例的集合.您可以向其追加其他对象(它只存储在列表中).它是在读取文件时创建的,例如:
def file_reader(file):
obj = MyCollection()
for line in file:
other_obj = line_reader(line)
obj.append(other_obj)
return obj
Run Code Online (Sandbox Code Playgroud)
如果我稍后尝试覆盖该对象(通过读取不同的文件),原始数据不会被删除,该对象只是被扩展.奇怪的是,如果我使用不同的引用,这似乎会发生:
obj1 = file_reader(file)
obj2 = file_reader(file1)
Run Code Online (Sandbox Code Playgroud)
我怀疑循环引用有一些问题,但我无法理解逻辑.有人有想法吗?
编辑:MyCollection的基本部分如下:
class MyCollection(object):
def __init__(self, objs = []):
self.objs = objs
def append(self, obj):
self.objs.append(obj)
Run Code Online (Sandbox Code Playgroud) 如果我尝试将列表附加到自身会发生什么?
# Let's say empty list is created.
some_list = []
# Now, append it with self
some_list.append(some_list)
# Output shows [[...]] on iPython console.
Run Code Online (Sandbox Code Playgroud)
这是什么意思?会some_list成为递归列表还是什么?引用计数会发生什么some_list?垃圾收集者如何对待这个?什么时候some_list会被垃圾收集?