Java Can';我是否将@Value注释与@Transient注释一起使用?

Java Can';我是否将@Value注释与@Transient注释一起使用?,java,hibernate,spring,hibernate-annotations,spring-annotations,Java,Hibernate,Spring,Hibernate Annotations,Spring Annotations,我有一个类来映射使用hibernate的表。我想忽略一些变量,以便将映射用作常量。我想从属性中加载常量值,所以我对其进行如下编码: @Transient @Value("${something.value}") private int MY_VALUE; 但是,MY_value的值始终设置为0。我不能将@Transient注释与@Value注释一起使用吗?或者我错过了其他东西?这两个注释属于不同的领域 @Transient属于实体,而@Value属于SpringBean。实体由JPA/Hibe

我有一个类来映射使用hibernate的表。我想忽略一些变量,以便将映射用作常量。我想从属性中加载常量值,所以我对其进行如下编码:

@Transient
@Value("${something.value}")
private int MY_VALUE;

但是,
MY_value
的值始终设置为0。我不能将@Transient注释与@Value注释一起使用吗?或者我错过了其他东西?

这两个注释属于不同的领域

@Transient
属于实体,而
@Value
属于SpringBean。实体由JPA/Hibernate管理,springbean由Spring管理。把两者混为一谈不是个好主意


您可以通过和AspectJ编译或加载时编织来实现这一点,但我强烈建议不要使用这种方法。使用Springbean来保存
@值
,而不是实体

您可以使用
@Value
指定在Spring创建bean时要加载的属性值

但是,如果您使用Hibernate从数据库加载数据,Spring不会为您实例化这些类。因此您的
@值
注释无效

我建议将
@Value
注入从Hibernate加载这些实体的DAO中,比如

public class FooDao {
    @Value("...")
    private int yourConfiguredValue;

    public getFoo() {
        Foo foo = sessionFactory.getCurrentSession().get(...);
        foo.setYourValue(yourConfiguredValue);
        return foo;
    }
}

在我的场景中,我有一个与班级组织有关系的班级员工

我不想序列化整个依赖对象(Organization),而是序列化Organization的单个参数(例如orgID)

我尝试了以下几点:

@Transient
@value("#{target.orgId.id}")
private UUID org_Id;
但它不起作用。因此,我使用了一种简单的getter方法,而不是字段变量,如下所示:

@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "orgID")
private Organization orgId;

@JsonProperty("orgId")
public UUID getOrg_ID() {
    return orgId.getId();
}
它成功了,我得到了简单的orgId字段作为回应,由Jackson序列化。
Jackson在使用getter时似乎没有考虑字段变量是否已声明或与该getter方法不对应。

如果删除
@Transient
注释,如果删除该项目引发的错误,它将继续设置为
0
?@bluefoot,由于这个问题,我得到的
foo
是一个类似
listfoos=…
的列表。将
@Value
注入具有循环的每个对象是一个好主意吗?如果需要向每个对象添加值,还有什么其他方法?但是,如果它是常量和/或属性文件,我认为根本没有附加到实体对象上的值——听起来不像是与FoO的每个实例相关,特别是如果它们都具有相同的值。我会将@Value附加到其他类。