ilginç birkaç şey hakkında Bulundu bu konu.
@Entity
@Table(name="users")
class User extends Model{
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="users_id_seq")
@Column(name="id", updatable=false, nullable=false)
val id:Long = 0L
@BeanProperty var name:String = _
@BeanProperty var email:String = _
}
Bu sınıf sırayla böyle tanımlanır User
adında bir java sınıfı için derlendi:
@Entity
@Table(name="users")
@ScalaSignature(bytes=long array of bytes)
public class User extends Model
implements ScalaObject, EntityBean
{
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="users_id_seq")
@Column(name="id", updatable=false, nullable=false)
private final long id;
private String name;
private String email;
private volatile int bitmap$init$0;
private static String _EBEAN_MARKER = "models.User";
...
public long id()
{
if ((_ebean_get_bitmap$init$0() & 0x1) != 0)
{
_ebean_get_id(); return _ebean_get_id();
}
throw new
UninitializedFieldError("Uninitialized field: User.scala: 17".toString());
}
public String name()
{
if ((_ebean_get_bitmap$init$0() & 0x2) != 0)
{
_ebean_get_name(); return _ebean_get_name();
} throw new
UninitializedFieldError("Uninitialized field: User.scala: 19".toString());
}
public void name_$eq(String paramString) {
_ebean_set_name(paramString);
_ebean_set_bitmap$init$0(_ebean_get_bitmap$init$0() | 0x2);
}
....
benim uygulamada bu Model
sınıf var
bitmap$init$0
aslında bir sınıf geliştirmesinden geliyor ve sorumlununolduğunu düşündüm Şu anda kullandığımkütüphanesi. Fakat yazınızı okuduktan sonra, JPA'nın bu nesne üzerinde bir çeşit bytecode geliştirmesi yapıp yapmadığını araştırmaya gittim. Bunu kontrol etmek için bir kopya projesi oluşturdum, ancak Java'da. User
sınıf için oluşturulan kod aşağıdaki gibi, hiçbir bitmap$init$0
alanı var olur: sorun
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="users")
public class User
{
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="users_id_seq")
@Column(name="id", updatable=false, nullable=false)
private Long id;
private String name;
private String email;
public void setId(Long id)
{
this.id = id;
}
public Long getId() {
return this.id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
}
Bütün bu tarz bu post götürdü ve ben kesinlikle katılıyorum. JPA'nın Scala Ebean/Hibernate'e entegre edilmesi gerçek bir acıdır. Bu bitmap$ini$0
alanının, Ebean tarafından sınıf bayt koduna veya başka bir şeye enjekte edilmesi durumunda hala anlamadım.
Size, Scala, described here olana benzer bir şey daha sonra java için ilk kod derlenerek oluşturulmuş Java baytkoduna bir şerh (@Transitent
) ilişkilendirerek, bu tür davranışları aşmaya çalışacağız gibi görünüyor. Ama gerçekten bunun gerçekten değerli olduğunu sanmıyorum!
Kesinlikle aynı sorun yaşıyorum. Ama görüşen sadece iki kişi var gibi görünüyor. –